Python繪制可以表示點密度的散點圖得方法
首先,明確一下本文的需求。
現(xiàn)有一個.csv
格式的表格文件,其各列數(shù)據(jù)的開頭部分如下圖所示。其中,對于名稱為26
的這1
列(左側(cè)紫色框內(nèi)數(shù)據(jù)),我們希望提取其數(shù)值等于1
的所有行,并對這些行中的NIR_predict
列與NIR_true
列(右側(cè)紫色框內(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
定義存儲所得圖片結(jié)果的路徑。
隨后,使用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í)行上述代碼,即可在結(jié)果文件夾中看到所得圖片;如下圖所示。
可以看到,我們已經(jīng)繪制得到了指定數(shù)據(jù)之間的密度散點圖。當然,我這里所選色帶,將密度較低的區(qū)域標記為紅色系,密度較高的區(qū)域標記為了藍色系,可能和一般情況下大家常用的色系相反——我是一開始選錯了,后面也沒有修改,這里大家理解即可;如果需要修改這個色系,大家修改上述代碼中的cmap = "Spectral"
部分即可。
至此,大功告成。
以上就是Python繪制可以表示點密度的散點圖得方法的詳細內(nèi)容,更多關(guān)于Python繪制散點圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python自制包并用pip免提交到pypi僅安裝到本機【推薦】
這篇文章主要介紹了python自制包并用pip免提交到pypi僅安裝到本機,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06在django中查詢獲取數(shù)據(jù),get, filter,all(),values()操作
這篇文章主要介紹了在django中查詢獲取數(shù)據(jù),get, filter,all(),values()操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Windows系統(tǒng)下Chromedriver.exe安裝及配置詳細教程
ChromeDriver.exe是一款實用的chrome瀏覽器驅(qū)動工具,能夠用于自動化測試、網(wǎng)絡爬蟲和操作瀏覽器,其主要作用是模擬瀏覽器操作,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下Chromedriver.exe安裝及配置的相關(guān)資料,需要的朋友可以參考下2023-11-11淺談Django自定義模板標簽template_tags的用處
這篇文章主要介紹了淺談Django自定義模板標簽template_tags的用處,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12Python趣味挑戰(zhàn)之用pygame實現(xiàn)簡單的金幣旋轉(zhuǎn)效果
今天教大家怎么用pygame實現(xiàn)簡單的金幣旋轉(zhuǎn)效果,文中有非常詳細的代碼示例,對正在學習python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05