Matplotlib 中的疊加條形圖
我們在 Matplotlib 中使用 matplotlib.pyplot.bar()
方法生成條形圖。為了將某個資料集的條形圖堆疊在另一個資料集上,我們將所有需要堆疊的資料集相加,並將總和作為 bottom
引數傳遞給 bar()
方法。
import matplotlib.pyplot as plt
data1=[30,20,10,0,0]
data2=[20,20,20,20,0]
data3=[50,60,70,80,100]
year=["2015","2016","2017","2018","2019"]
fig,ax=plt.subplots(3,1,figsize=(10,8))
ax[0].bar(year,data1,color="red")
ax[0].legend(["C++"])
ax[1].bar(year,data2,color="yellow")
ax[1].legend(["JavaScript"])
ax[2].bar(year,data3,color="green")
ax[2].legend(["Python"])
plt.show()
輸出:
在這裡,我們有三個獨立的條形圖,分別代表了某公司員工五年來對一種程式語言的偏好。我們將討論如何將一門語言的條形圖疊加到另一門語言上,並通過一張條形圖來研究多年來人們對程式語言的整體選擇。
疊加條形圖 Matplotlib
import numpy as np
import matplotlib.pyplot as plt
data1=[30,20,10,0,0]
data2=[20,20,20,20,0]
data3=[50,60,70,80,100]
year=["2015","2016","2017","2018","2019"]
plt.figure(figsize=(9,7))
plt.bar(year,data3,color="green",label="Python")
plt.bar(year,data2,color="yellow",bottom=np.array(data3),label="JavaScript")
plt.bar(year,data1,color="red",bottom=np.array(data3)+np.array(data2),label="C++")
plt.legend(loc="lower left",bbox_to_anchor=(0.8,1.0))
plt.show()
輸出:
它將一個條形圖疊加在另一個條形圖上。在圖中,我們先將 data3
繪製成 Python 資料,作為其他條形圖的基礎,然後再繪製 data2
的條形圖,將 data3
的條形圖作為 data2
條形圖的基礎。為了將 data2
的條形圖疊加到 data3
上,我們設定 bottom=np.array(data3)
。
同樣,在繪製 data1
的條形圖時,我們以 data2
和 data3
的條形圖為基礎。為此,我們在繪製 data1
的條形圖時,設定 bottom=np.array(data3)+np.array(data2)
。
需要注意的是,我們必須使用 NumPy
陣列來新增 bottom
引數的資料。如果我們設定 bottom=data3+data2
,它將通過在列表 data3
的末尾追加 data2
的元素來建立列表。
如果我們不想使用 NumPy
陣列,我們可以使用列表推導法來新增 list 的對應元素。
import numpy as np
import matplotlib.pyplot as plt
data1=[30,20,10,0,0]
data2=[20,20,20,20,0]
data3=[50,60,70,80,100]
year=["2015","2016","2017","2018","2019"]
plt.figure(figsize=(9,7))
plt.bar(year,data3,color="green",label="Python")
plt.bar(year,data2,color="yellow",bottom=data3,label="JavaScript")
plt.bar(year,data1,color="red",bottom=[sum(data) for data in zip(data2,data3)],label="C++")
plt.legend(loc="lower left",bbox_to_anchor=(0.8,1.0))
plt.show()
輸出:
使用 Pandasd 的 Matplotlib 疊加條形圖的方法
我們也可以使用 Python 中的 Pandas
庫,在 Python 中生成堆疊的柱狀圖。
import pandas as pd
import matplotlib.pyplot as plt
years=["2015","2016","2017","2018","2019"]
data={
"Python":[50,60,70,80,100],
"JavaScript":[20,20,20,20,0],
"C++":[30,20,10,0,0],
}
df=pd.DataFrame(data,index=years)
df.plot(kind="bar",stacked=True,figsize=(10,8))
plt.legend(loc="lower left",bbox_to_anchor=(0.8,1.0))
plt.show()
輸出:
它從 Pandas DataFrame 中生成一個堆疊的條形圖,其中一列的條形圖堆疊在 DataFrame 中每個索引的另一列上。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn