使用Python繪制帶填充紋理的堆疊圖
在數(shù)據(jù)分析和可視化中,堆疊條形圖是一種非常有用的工具,能夠直觀地展示不同類別在各個(gè)樣本中的分布情況。而為堆疊圖添加填充紋理,則可以讓圖表更加美觀且富有層次感。今天,我們將通過 Python 的 Matplotlib 庫來實(shí)現(xiàn)這種帶填充紋理的堆疊圖。
一、安裝 Matplotlib 庫
在開始繪制圖表之前,我們需要確保已經(jīng)安裝了 Matplotlib 庫。如果你尚未安裝 Matplotlib,可以通過【win】+【R】打開【運(yùn)行】,并輸入[cmd],點(diǎn)擊確定,并輸入以下命令進(jìn)行安裝:
pip install matplotlib
安裝完成后,你就可以在 Python 腳本中導(dǎo)入并使用 Matplotlib 了。
二、數(shù)據(jù)準(zhǔn)備
為了繪制堆疊圖,我們需要準(zhǔn)備一些數(shù)據(jù)。在本例中,我們使用一個(gè) JSON 格式的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)樣本數(shù)、RMSE 值以及類別標(biāo)簽。以下是數(shù)據(jù)的具體格式:
data = {
"samples": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
"RMSE_values": [
[0.15, 0.2, 0.25],
[0.3, 0.35, 0.3],
[0.25, 0.3, 0.35],
[0.2, 0.25, 0.3],
[0.18, 0.22, 0.28],
[0.2, 0.24, 0.29],
[0.22, 0.26, 0.31],
[0.19, 0.23, 0.32],
[0.17, 0.21, 0.33],
[0.16, 0.2, 0.34],
[0.14, 0.19, 0.35],
[0.13, 0.18, 0.36],
[0.12, 0.17, 0.37]
],
"labels": ["A", "B", "C", "D"]
}其中:
samples表示樣本編號。RMSE_values是一個(gè)二維列表,每一行對應(yīng)一個(gè)樣本,每一列對應(yīng)一個(gè)類別的值。labels是類別的標(biāo)簽。
三、設(shè)置繪圖風(fēng)格和字體
在繪制圖表之前,我們需要設(shè)置合適的繪圖風(fēng)格和字體,以確保圖表的美觀性和可讀性。Matplotlib 提供了多種預(yù)設(shè)的繪圖風(fēng)格,例如 seaborn-v0_8-colorblind,這種風(fēng)格適合色盲用戶,能夠提供清晰的視覺效果。
import matplotlib.pyplot as plt
# 檢查可用樣式
print("Available styles:", plt.style.available)
# 設(shè)置繪圖風(fēng)格和字體
plt.style.use('seaborn-v0_8-colorblind') # 使用可用的樣式
plt.rcParams.update({
'font.family': 'SimHei',
'font.size': 10,
'axes.unicode_minus': False
})四、繪制堆疊條形圖并添加紋理
接下來,我們將使用 Matplotlib 的bar方法來繪制堆疊條形圖。為了實(shí)現(xiàn)紋理填充,我們需要為每個(gè)條形圖指定 hatch 參數(shù)。以下是完整的代碼實(shí)現(xiàn):
import numpy as np
# 創(chuàng)建圖形和坐標(biāo)軸對象,調(diào)整圖形大小為 (10, 6)
fig, ax = plt.subplots(figsize=(10, 6)) # 調(diào)整圖形大小
# 定義顏色和紋理
colors = ['navy', 'teal', 'mediumaquamarine', 'khaki'] # 定義每個(gè)類別的顏色
hatches = ['xx', '', '\\\\', '//'] # 定義每個(gè)類別的紋理
# 初始化底部位置
bottom = np.zeros(len(data["samples"]))
# 繪制堆疊條形圖并添加紋理
for i, label in enumerate(data["labels"]):
if i < 3: # 只有三個(gè)類別需要繪制,因?yàn)閿?shù)據(jù)中只有三個(gè)值
values = [item[i] for item in data["RMSE_values"]] # 提取每個(gè)樣本對應(yīng)類別的值
# 繪制條形圖,并應(yīng)用顏色和紋理
bars = ax.bar(data["samples"], values, bottom=bottom, color=colors[i], hatch=hatches[i], label=label, edgecolor='black', width=0.6)
bottom += values # 更新底部位置以便堆疊下一個(gè)類別五、添加圖表元素
為了讓圖表更加完整和易于理解,我們需要添加坐標(biāo)軸標(biāo)簽、標(biāo)題、圖例以及網(wǎng)格線。
# 設(shè)置坐標(biāo)軸標(biāo)簽和標(biāo)題
ax.set_xlabel('樣本數(shù)') # 設(shè)置x軸標(biāo)簽
ax.set_ylabel('RMSE (米)') # 設(shè)置y軸標(biāo)簽
ax.set_title('紋理填充堆疊條形圖') # 設(shè)置圖表標(biāo)題為中文
# 添加圖例
ax.legend(loc='upper right') # 設(shè)置圖例位置
# 設(shè)置網(wǎng)格和坐標(biāo)軸范圍
ax.grid(True, axis='y', linestyle='--', alpha=0.7) # 添加網(wǎng)格線
ax.set_ylim(0, 1.5) # 設(shè)置y軸范圍六、顯示和保存圖表
最后,我們使用 plt.show() 方法來顯示圖表。如果需要保存圖表,可以使用 plt.savefig() 方法。
# 顯示圖表 plt.show() # 關(guān)閉繪圖窗口 plt.close()
七、效果展示
運(yùn)行上述代碼后,你將得到一個(gè)帶有填充紋理的堆疊條形圖。每個(gè)條形圖的紋理和顏色都清晰可見,能夠直觀地展示不同類別在各個(gè)樣本中的分布情況。

八、完整代碼展示
import matplotlib.pyplot as plt
import numpy as np
# 從JSON格式的數(shù)據(jù)中提取需要繪制的圖表信息
data = {
"samples": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
"RMSE_values": [
[0.15, 0.2, 0.25],
[0.3, 0.35, 0.3],
[0.25, 0.3, 0.35],
[0.2, 0.25, 0.3],
[0.18, 0.22, 0.28],
[0.2, 0.24, 0.29],
[0.22, 0.26, 0.31],
[0.19, 0.23, 0.32],
[0.17, 0.21, 0.33],
[0.16, 0.2, 0.34],
[0.14, 0.19, 0.35],
[0.13, 0.18, 0.36],
[0.12, 0.17, 0.37]
],
"labels": ["A", "B", "C", "D"]
}
# 檢查可用樣式
print("Available styles:", plt.style.available)
# 設(shè)置繪圖風(fēng)格和字體
plt.style.use('seaborn-v0_8-colorblind') # 使用可用的樣式
# 設(shè)置支持中文的字體
plt.rcParams.update({
'font.family': 'SimHei',
'font.size': 10,
'axes.unicode_minus': False
})
# 創(chuàng)建圖形和坐標(biāo)軸對象,調(diào)整圖形大小為 (10, 6)
fig, ax = plt.subplots(figsize=(10, 6)) # 調(diào)整圖形大小
# 定義顏色和紋理
colors = ['navy', 'teal', 'mediumaquamarine', 'khaki']
hatches = ['xx', '', '\\\\', '//']
# 繪制堆疊條形圖并添加紋理
bottom = np.zeros(len(data["samples"]))
for i, label in enumerate(data["labels"]):
if i < 3:
values = [item[i] for item in data["RMSE_values"]]
# 繪制條形圖,并應(yīng)用顏色和紋理
bars = ax.bar(data["samples"], values, bottom=bottom, color=colors[i], hatch=hatches[i], label=label, edgecolor='black', width=0.6)
bottom += values # 更新底部位置以便堆疊下一個(gè)類別
# 設(shè)置坐標(biāo)軸標(biāo)簽和標(biāo)題
ax.set_xlabel('樣本數(shù)')
ax.set_ylabel('RMSE (米)')
ax.set_title('紋理填充堆疊條形圖')
# 添加圖例
ax.legend(loc='upper right')
# 設(shè)置網(wǎng)格和坐標(biāo)軸范圍
ax.grid(True, axis='y', linestyle='--', alpha=0.7)
ax.set_ylim(0, 1.5)
# 顯示圖表
plt.show()
# 關(guān)閉繪圖窗口
plt.close()九、總結(jié)
通過 Matplotlib,我們可以輕松地實(shí)現(xiàn)帶填充紋理的堆疊圖。這種圖表不僅美觀,還能提供豐富的信息。在實(shí)際應(yīng)用中,你可以根據(jù)需要調(diào)整顏色、紋理、字體等參數(shù),以滿足不同的可視化需求。
到此這篇關(guān)于使用Python繪制帶填充紋理的堆疊圖的文章就介紹到這了,更多相關(guān)Python繪制堆疊圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django中更改默認(rèn)數(shù)據(jù)庫為mysql的方法示例
這篇文章主要介紹了Django中更改默認(rèn)數(shù)據(jù)庫為mysql的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
python計(jì)算鄰接矩陣的實(shí)現(xiàn)示例
鄰接矩陣是一種常見的圖表示方法,本文主要介紹了python計(jì)算鄰接矩陣的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
Keras多線程機(jī)制與flask多線程沖突的解決方案
這篇文章主要介紹了Keras多線程機(jī)制與flask多線程沖突的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
python3的數(shù)據(jù)類型及數(shù)據(jù)類型轉(zhuǎn)換實(shí)例詳解
在本文里小編給大家分享的是關(guān)于python3的數(shù)據(jù)類型及數(shù)據(jù)類型轉(zhuǎn)換以及相關(guān)實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2019-08-08
python django使用haystack:全文檢索的框架(實(shí)例講解)
下面小編就為大家?guī)硪黄猵ython django使用haystack:全文檢索的框架(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
Python數(shù)學(xué)建模學(xué)習(xí)模擬退火算法旅行商問題示例解析
模擬退火算法不僅可以解決連續(xù)函數(shù)優(yōu)化問題,KIRKPATRICK在1983年成功將其應(yīng)用于求解組合優(yōu)化問題,現(xiàn)已成為求解旅行商問題的常用方法,通常采用反序、移位和交換等操作算子產(chǎn)生新解2021-10-10
Flask使用SocketIO實(shí)現(xiàn)WebSocket與Vue進(jìn)行實(shí)時(shí)推送
本文主要介紹了Flask使用SocketIO實(shí)現(xiàn)WebSocket與Vue進(jìn)行實(shí)時(shí)推送,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
在Linux中通過Python腳本訪問mdb數(shù)據(jù)庫的方法
這篇文章主要介紹了在Linux中通過Python腳本訪問mdb數(shù)據(jù)庫的方法,本文示例基于debian系的Linux系統(tǒng),需要的朋友可以參考下2015-05-05
python實(shí)現(xiàn)將多個(gè)文件分配到多個(gè)文件夾的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)將多個(gè)文件分配到多個(gè)文件夾的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

