python繪圖系列文章目錄
往期python繪圖合集:
python繪制簡單的折線圖
python讀取excel中數(shù)據(jù)并繪制多子圖多組圖在一張畫布上
python繪制帶誤差棒的柱狀圖
python繪制多子圖并單獨(dú)顯示
python讀取excel數(shù)據(jù)并繪制多y軸圖像
python繪制柱狀圖并美化|不同顏色填充柱子
python隨機(jī)生成數(shù)據(jù)并用雙y軸繪制兩條帶誤差棒的折線圖
Python繪制帶誤差棒的柱狀圖漸變色填充含數(shù)據(jù)標(biāo)注(進(jìn)階)
一、簡介
Python 是一種極為流行的編程語言,它可以用于數(shù)據(jù)處理、機(jī)器學(xué)習(xí)和可視化等多個(gè)領(lǐng)域。Matplotlib 是 Python 里最受歡迎的數(shù)據(jù)可視化庫之一,本文將介紹如何使用 Python 和 Matplotlib 繪制散點(diǎn)圖。我們將從數(shù)據(jù)生成開始,涵蓋繪圖的各個(gè)方面,包括設(shè)置坐標(biāo)軸范圍、刻度和標(biāo)簽字體樣式,以及調(diào)整圖例的字體和大小等。
首先,請確保已經(jīng)安裝了以下庫:
- Python 3.x
- NumPy
- Matplotlib
如果您還沒有安裝這些庫,可以通過以下方式在命令行中安裝:
pip install numpy matplotlib
二、生成數(shù)據(jù)
在繪制散點(diǎn)圖之前,我們需要先生成一些數(shù)據(jù)。在本篇博文中,我們將生成三組隨機(jī)數(shù)據(jù),代表全班的語文、數(shù)學(xué)和英語分?jǐn)?shù)。具體來說,我們將使用 numpy 庫的 random 模塊生成一組包含 1000 個(gè)整數(shù)的數(shù)組,代表每個(gè)學(xué)生的分?jǐn)?shù)。代碼如下:
import numpy as np
nscores = 1000 # 生成 1000 個(gè)學(xué)生的分?jǐn)?shù)數(shù)據(jù)
chinese_scores = np.random.randint(50, 100, size=nscores)
math_scores = np.random.randint(40, 90, size=nscores)
english_scores = np.random.randint(60, 100, size=nscores)
使用 numpy 庫的 random 模塊生成了三組隨機(jī)數(shù)據(jù),分別代表全班的語文、數(shù)學(xué)和英語分?jǐn)?shù)。其中,randint() 函數(shù)用于生成指定范圍內(nèi)的隨機(jī)整數(shù)。這里我們將語文分?jǐn)?shù)限制在 50 到 100 之間(不包括 100),將數(shù)學(xué)分?jǐn)?shù)限制在 40 到 90 之間(不包括 90),將英語分?jǐn)?shù)限制在 60 到 100 之間(不包括 100)。
三、繪制散點(diǎn)圖
使用 Matplotlib 的 scatter() 函數(shù)繪制散點(diǎn)圖。具體來說,我們將使用 scatter() 函數(shù)三次,分別繪制語文分?jǐn)?shù)與數(shù)學(xué)分?jǐn)?shù)、語文分?jǐn)?shù)與英語分?jǐn)?shù)以及數(shù)學(xué)分?jǐn)?shù)與英語分?jǐn)?shù)之間的關(guān)系。代碼如下:
import matplotlib.pyplot as plt
# 創(chuàng)建畫布和子圖
fig, ax = plt.subplots()
# 繪制散點(diǎn)圖
ax.scatter(chinese_scores, math_scores, s=20, alpha=0.8, label='Chinese and Math')
ax.scatter(chinese_scores, english_scores, s=20, alpha=0.8, label='Chinese and English')
ax.scatter(math_scores, english_scores, s=20, alpha=0.8, label='Math and English')
# 展示圖形
plt.show()
解釋:用了 matplotlib.pyplot 模塊的 subplots() 函數(shù)創(chuàng)建了一個(gè)畫布和一個(gè)子圖。然后,我們分別調(diào)用了三次 scatter() 函數(shù),傳遞了相應(yīng)的參數(shù)。其中,s 參數(shù)指定散點(diǎn)的大小,alpha 參數(shù)指定散點(diǎn)的透明度,label 參數(shù)指定每組數(shù)據(jù)的標(biāo)簽。
四、設(shè)置坐標(biāo)軸范圍、刻度和標(biāo)簽字體樣式
進(jìn)一步美化圖表,比如設(shè)置坐標(biāo)軸范圍、刻度和標(biāo)簽字體樣式
4.1 設(shè)置坐標(biāo)軸范圍
在散點(diǎn)圖中,通常需要設(shè)置坐標(biāo)軸的范圍以確保數(shù)據(jù)能夠顯示在圖表中。在 Matplotlib 中,我們可以使用 set_xlim() 和 set_ylim() 函數(shù)來設(shè)置 x 軸和 y 軸的范圍。例如,如果我們希望 x 軸的范圍在 0 到 100 之間,y 軸的范圍在 20 到 100 之間,那么可以按照以下方式修改代碼:
ax.set_xlim(0, 100)
ax.set_ylim(20, 100)
4.2 設(shè)置坐標(biāo)軸刻度
在散點(diǎn)圖中,可能需要設(shè)置不同的刻度大小以更好地展示數(shù)據(jù)。在 Matplotlib 中,我們可以使用 set_xticks() 和 set_yticks() 函數(shù)來設(shè)置 x 軸和 y 軸的刻度位置。例如,如果我們希望 x 軸和 y 軸每隔 10 個(gè)單位就顯示一個(gè)刻度,那么可以按照以下方式修改代碼:
ax.set_xticks(range(0, 101, 10))
ax.set_yticks(range(20, 101, 10))
4.3 設(shè)置坐標(biāo)軸標(biāo)簽字體樣式
在散點(diǎn)圖中,需要給 x 軸和 y 軸分別添加標(biāo)簽以說明數(shù)據(jù)含義。在 Matplotlib 中,我們可以使用 set_xlabel() 和 set_ylabel() 函數(shù)來添加標(biāo)簽,并使用 fontname 參數(shù)指定標(biāo)簽字體。例如,如果我們想要將 x 軸標(biāo)簽設(shè)置為“語文分?jǐn)?shù)”,將 y 軸標(biāo)簽設(shè)置為“數(shù)學(xué)分?jǐn)?shù)/英語分?jǐn)?shù)”,并將標(biāo)簽字體設(shè)置為 Times New Roman,那么可以按照以下方式修改代碼:
ax.set_xlabel('Chinese Scores', fontname='Times New Roman')
ax.set_ylabel('Math Scores / English Scores', fontname='Times New Roman')
for tick in ax.get_xticklabels():
tick.set_fontname("Times New Roman")
for tick in ax.get_yticklabels():
tick.set_fontname("Times New Roman")
五、完整代碼
得到了如下完整的代碼,其中包括數(shù)據(jù)生成、繪圖、設(shè)置坐標(biāo)軸范圍、刻度和標(biāo)簽字體樣式,以及調(diào)整圖例的字體和大小等步驟。文章來源:http://www.zghlxwxcb.cn/news/detail-549938.html
import matplotlib.pyplot as plt
import numpy as np
font = {'family':'Times New Roman','size':14}
# 生成三組隨機(jī)數(shù)據(jù),代表全班的語文、數(shù)學(xué)和英語分?jǐn)?shù)
nscores = 60 # 生成 60 個(gè)學(xué)生的分?jǐn)?shù)數(shù)據(jù)
chinese_scores = np.random.randint(50, 100, size=nscores)
math_scores = np.random.randint(40, 90, size=nscores)
english_scores = np.random.randint(60, 100, size=nscores)
# 創(chuàng)建畫布和子圖
fig, ax = plt.subplots(figsize=(8,5),dpi = 600)
# 繪制散點(diǎn)圖,并指定不同顏色、大小和透明度
x = np.arange(nscores)
y = x
s1 = 3*chinese_scores # 大小與分?jǐn)?shù)相關(guān)
s2 = math_scores*2
s3 = english_scores *1
c1 = chinese_scores # 顏色深淺與溫度相關(guān)
c2 = math_scores
c3 = english_scores
ax.scatter(chinese_scores, math_scores, s=s1, c=c1, cmap='coolwarm', norm=plt.Normalize(vmin=0, vmax=1), alpha=0.8, label='Chinese')
ax.scatter(chinese_scores, english_scores, s=s2, c=c2, cmap='PiYG', norm=plt.Normalize(vmin=0, vmax=1), alpha=0.8, label='Math')
ax.scatter(math_scores, english_scores, s=s3, c=c3, cmap='rainbow', norm=plt.Normalize(vmin=0, vmax=1), alpha=0.8, label='English')
# 設(shè)置坐標(biāo)軸范圍、刻度和標(biāo)簽字體樣式
ax.set_xlim(40, 100)
ax.set_ylim(40, 110)
ax.set_xticks(range(40, 110, 10))
ax.set_yticks(range(40, 110, 10))
plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.size'] = 20
ax.set_xlabel('Chinese Scores', fontname='Times New Roman')
ax.set_ylabel('Math Scores / English Scores', fontname='Times New Roman')
for tick in ax.get_xticklabels():
tick.set_fontname("Times New Roman")
for tick in ax.get_yticklabels():
tick.set_fontname("Times New Roman")
ax.legend(ncol=3,loc=1,prop=font)
plt.tight_layout()
# plt.savefig('散點(diǎn)圖.jpg')
# 展示圖形
plt.show()
六、 運(yùn)行結(jié)果
文章來源地址http://www.zghlxwxcb.cn/news/detail-549938.html
到了這里,關(guān)于python繪制散點(diǎn)圖|散點(diǎn)大小和顏色深淺由數(shù)值決定的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!