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

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做