Python中matplotlib绘制密度散点图的方法

2024-04-27 12:20

本文主要是介绍Python中matplotlib绘制密度散点图的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  本文介绍基于Python语言的matplotlib模块,对Excel表格文件中的指定数据,加以密度散点图绘制的方法。

  首先,明确一下本文的需求。

  现有一个.csv格式的表格文件,其各列数据的开头部分如下图所示。其中,对于名称为26的这1列(左侧紫色框内数据),我们希望提取其数值等于1的所有行,并对这些行中的NIR_predict列与NIR_true列(右侧紫色框内数据)的数值加以密度散点图的绘制。

  明确了需求,即可开始代码的撰写。本文所用代码如下。

# -*- coding: utf-8 -*-
"""
Created on Mon Apr  1 12:14:38 2024@author: fkxxgis
"""import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kdecsv_file_path = r"E:\04_Reconstruction\99_MODIS\Train_Model_0715_Main_Combine.csv"
picture_file_path = r"E:\04_Reconstruction\99_MODIS\Scatter_result.png"data = pd.read_csv(csv_file_path)x = data[data["26"] == 1]['NIR_true']
y = data[data["26"] == 1]['NIR_predict']xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)
idx = z.argsort()
plt.scatter(x, y, c = z, s = 10, cmap = "Spectral")
plt.colorbar()plt.rc("font", family = "Times New Roman")
x_line = np.linspace(min(min(x), min(y)), max(max(x), max(y)), 100)
plt.plot(x_line, x_line, color='black', linestyle='--')
plt.xlabel('NIR_true')
plt.ylabel('NIR_predict')
plt.savefig(picture_file_path, dpi = 400)
plt.show()

  首先,我们通过import语句导入所需模块。其中,numpy用于数值计算,pandas用于数据处理,matplotlib.pyplot用于绘图,scipy.stats.gaussian_kde用于计算核密度估计。

  其次,通过csv_file_path定义待绘图的.csv格式文件的路径,通过picture_file_path定义存储所得图片结果的路径。

  随后,使用pd.read_csv().csv格式文件中读取数据,并存储在名为dataDataFrame中。通过筛选条件data["26"] == 1DataFrame中获取符合指定条件的数据,并分别存储在xy中。

  接下来,使用np.vstack()xy垂直堆叠为一个二维数组xy,并使用scipy.stats.gaussian_kde()计算二维数据的核密度估计值,并将其存储在z中;使用z.argsort()z进行排序,返回索引值,并将其存储在idx中。使用plt.scatter()绘制散点图,其中xy是散点的横纵坐标,c是颜色值,s是散点的大小,cmap是颜色映射,并使用plt.colorbar()添加颜色条。

  紧接着,使用plt.rc()设置字体为Times New Roman;随后,生成一条直线的横坐标范围,使用np.linspace()生成一系列横坐标值,并存储在x_line中;这些点将组成后续所得散点图中的x = y线;使用plt.plot()绘制直线,颜色为黑色,线型为虚线。此外,使用plt.xlabel()plt.ylabel()添加x轴和y轴的标签,使用plt.savefig()将图形保存为指定路径的图片文件,设置dpi值为400。最后,使用plt.show()显示图形。

  执行上述代码,即可在结果文件夹中看到所得图片;如下图所示。

  可以看到,我们已经绘制得到了指定数据之间的密度散点图。当然,我这里所选色带,将密度较低的区域标记为红色系,密度较高的区域标记为了蓝色系,可能和一般情况下大家常用的色系相反——我是一开始选错了,后面也没有修改,这里大家理解即可;如果需要修改这个色系,大家修改上述代码中的cmap = "Spectral"部分即可。

  至此,大功告成。

欢迎关注:疯狂学习GIS

这篇关于Python中matplotlib绘制密度散点图的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940491

相关文章

利用Pandas进行数据清洗与过滤:Python实战指南

利用Pandas进行数据清洗与过滤:Python实战指南 作为一个Python爱好者和数据分析从业者,我一直在探索如何利用Python来更高效地处理和分析数据。Python语言以其简单易学、功能强大的特点,成为了数据分析领域的宠儿。本文将分享一些实用的Python数据分析技巧,并介绍一个名为PlugLink的开源工具,它可以帮助我们更方便地进行数据处理和自动化任务。 数据读取与处理 数据读取

Fiddler无法显示捕获到的网络流量的问题处理方法

Fiddler无法显示捕获到的网络流量的问题处理方法 1. 确认Fiddler是否正在捕获流量 打开Fiddler,确保左下角的“Capturing”按钮是选中的。如果不是,点击它开始捕获流量。使用快捷键 F12 来启动或停止捕获。 2.信任Fiddler的根证书 信任Fiddler的根证书:要捕获HTTPS流量,您需要信任Fiddler的根证书。 打开Fiddler,进入 Tools

Anaconda软件:安装、管理python相关包

Anaconda的作用 一个python环境中需要有一个解释器, 和一个包集合. 解释器: 根据python的版本大概分为2和3. python2和3之间无法互相兼容, 也就是说用python2语法写出来的脚本不一定能在python3的解释器中运行. 包集合:包含了自带的包和第三方包, 第三方包我们一般通过pip或者easy_install来下载, 当一个python环境中不包含这个包, 那

关于python中的关键字参数

在python语言中存在两种传参方式: 第一种是按照先后顺序来传参,这种传参风格,称为“位置参数”这是各个编程语言中最普遍的方式。 关键字传参~按照形参的名字来进行传参! 如上图所示,在函数中使用关键字传参的最大作用就是帮助程序员理解代码。帮助程序员知道这个参数是传给那个形参的。另外可以无视形参和实参的顺序! 位置参数金额关键字参数还能混着用,只不过混着用的时候要求参数在前,关键字参数

Andriod点击按钮响应方法

点击按钮响应有许多方法,比如下面这种: 布局layout.xml中定义一个id为button的按钮<Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"/> 在活动的java文件中按钮响应代码:Button btn = findViewByI

【python报错】TypeError: ‘dict_values‘ Object IsNot Subscriptable

【Python报错】TypeError: ‘dict_values’ object is not subscriptable 在Python中,字典(dict)提供了几种不同的视图对象,包括dict_keys、dict_values和dict_items。这些视图对象允许你以只读方式遍历字典的键、值或键值对。如果你尝试使用索引来访问dict_values对象的元素,会遇到TypeErro

Python Sting 练习实践(二)

字典增删改查 Student_Info = {'1220610001':'Alex','1220610002':'Bob','1220610003':'Cindy','1220610004':'David'}print("info:",Student_Info)print("pop('1220610004'):",Student_Info.pop('1220610004'))#del pri

Python Sting 练习实践(一)

字符串切片 name = "Alex_XT"print(name[name.find("e"):]) ex_XT 列表Tab对齐 name = "\tAlex_XT"print(name.expandtabs(tabsize=8)) 字符居中对齐 name = "Alex_XT"print(name.center(50,"-")) 字符左补齐 Name = "Alex_

自然语言处理(NLP)—— 符号方法与符号语言

1. 符号方法 1.1 雅各布森的结构主义         雅各布森的结构主义是一种语言学理论,它强调了语言结构中的两个基本维度:轴与范畴。这两个维度是理解雅各布森结构主义的核心概念。 1.1.1 轴向对立         句法轴(Syntagmatic Axis):这一轴向关注的是语言单元如何在句子中按照一定的顺序组合。它涉及到语言元素在实际语言使用中如何线性地排列组合,即一个单词在句子

Python中的函数式编程概念

Python中的函数式编程(Functional Programming)是一种编程范式,它强调使用函数作为主要的编程构建块,并且避免改变状态(即避免使用可变的数据结构和变量)和可变数据。虽然Python本身是一种多范式编程语言,支持面向对象编程、命令式编程等,但它也支持函数式编程的许多特性。 以下是函数式编程的一些核心概念,以及它们在Python中的体现: 高阶函数(Higher-Orde