Python利用matplotlib實現(xiàn)繪制密度散點圖
本文介紹基于Python語言的matplotlib模塊,對Excel表格文件中的指定數(shù)據(jù),加以密度散點圖繪制的方法。
首先,明確一下本文的需求。
現(xiàn)有一個.csv格式的表格文件,其各列數(shù)據(jù)的開頭部分如下圖所示。其中,對于名稱為26的這1列(左側紫色框內(nèi)數(shù)據(jù)),我們希望提取其數(shù)值等于1的所有行,并對這些行中的NIR_predict列與NIR_true列(右側紫色框內(nèi)數(shù)據(jù))的數(shù)值加以密度散點圖的繪制。

明確了需求,即可開始代碼的撰寫。本文所用代碼如下。
# -*- 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_kde
csv_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用于數(shù)值計算,pandas用于數(shù)據(jù)處理,matplotlib.pyplot用于繪圖,scipy.stats.gaussian_kde用于計算核密度估計。
其次,通過csv_file_path定義待繪圖的.csv格式文件的路徑,通過picture_file_path定義存儲所得圖片結果的路徑。
隨后,使用pd.read_csv()從.csv格式文件中讀取數(shù)據(jù),并存儲在名為data的DataFrame中。通過篩選條件data["26"] == 1從DataFrame中獲取符合指定條件的數(shù)據(jù),并分別存儲在x和y中。
接下來,使用np.vstack()將x和y垂直堆疊為一個二維數(shù)組xy,并使用scipy.stats.gaussian_kde()計算二維數(shù)據(jù)的核密度估計值,并將其存儲在z中;使用z.argsort()對z進行排序,返回索引值,并將其存儲在idx中。使用plt.scatter()繪制散點圖,其中x和y是散點的橫縱坐標,c是顏色值,s是散點的大小,cmap是顏色映射,并使用plt.colorbar()添加顏色條。
緊接著,使用plt.rc()設置字體為Times New Roman;隨后,生成一條直線的橫坐標范圍,使用np.linspace()生成一系列橫坐標值,并存儲在x_line中;這些點將組成后續(xù)所得散點圖中的x = y線;使用plt.plot()繪制直線,顏色為黑色,線型為虛線。此外,使用plt.xlabel()和plt.ylabel()添加x軸和y軸的標簽,使用plt.savefig()將圖形保存為指定路徑的圖片文件,設置dpi值為400。最后,使用plt.show()顯示圖形。
執(zhí)行上述代碼,即可在結果文件夾中看到所得圖片;如下圖所示。

可以看到,我們已經(jīng)繪制得到了指定數(shù)據(jù)之間的密度散點圖。當然,我這里所選色帶,將密度較低的區(qū)域標記為紅色系,密度較高的區(qū)域標記為了藍色系,可能和一般情況下大家常用的色系相反——我是一開始選錯了,后面也沒有修改,這里大家理解即可;如果需要修改這個色系,大家修改上述代碼中的cmap = "Spectral"部分即可。
至此,大功告成。
到此這篇關于Python利用matplotlib實現(xiàn)繪制密度散點圖的文章就介紹到這了,更多相關Python matplotlib繪制密度散點圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python操作Word文檔屬性與字數(shù)統(tǒng)計的方法詳解
這篇文章主要為大家詳細介紹了Python操作Word文檔屬性與字數(shù)統(tǒng)計的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2026-04-04
python GUI庫圖形界面開發(fā)之PyQt5單選按鈕控件QRadioButton詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5單選按鈕控件QRadioButton詳細使用方法與實例,需要的朋友可以參考下2020-02-02
Python流程控制之條件循環(huán)與異常處理實戰(zhàn)指南
在Python編程語言中,流程控制語句是構建程序邏輯的基礎構件之一,它們決定了程序中語句的執(zhí)行順序,允許我們創(chuàng)建更加復雜和動態(tài)的代碼結構,這篇文章主要介紹了Python流程控制之條件循環(huán)與異常處理實戰(zhàn)的相關資料,需要的朋友可以參考下2026-01-01

