1. 程式人生 > 其它 >python-Matplotlib庫

python-Matplotlib庫

垂直柱狀圖 bar()

data = pd.read_excel(pth)
data.sort_values(by="分數",inplace=True,ascending=False)
# 圖示中如需要顯示中文,則定義中文型別,否則顯示亂碼
plt.rcParams["font.sans-serif"]=["Simhei"]
# 圖中如果某個軸的資料要顯示負數,設定如下.
plt.rcParams['axes.unicode_minus'] = False
plt.bar(x=data["姓名"],height=data["分數"],color="skyblue",label="分數成績") #label是設定圖例,需要用legend方法顯示出來
plt.legend() #loc引數如下
''''
best'	0
'upper right'	1
'upper left'	2
'lower left'	3
'lower right'	4
'right'	5
'center left'	6
'center right'	7
'lower center'	8
'upper center'	9
'center'	10
'''
plt.xlabel("考生姓名")
plt.ylabel("考生成績")
plt.xticks([i for i in range(0,9,2)],rotation = 45)
plt.ylim(-20,max(data["分數"])+20)
plt.title(label="一年級考試成績",fontdict={"fontsize":16,"fontweight":"bold"})
#字型引數可以用上面字典模式,也可以用下面的單個引數賦值模式
plt.title(label="一年級考試成績",fontsize=16,fontweight="bold")
plt.show()

分組柱形圖,


原理其實很簡單,先生成6部影片的第一天資料,然後在往右偏移一點距離生成第二天的資料,3~5天重複,
第一天的偏移距離為0,第二天的偏移距離為0+偏移距離,第二天的偏移距離為0+偏移距離*2,3~5天重複
在下面程式碼中,我們對每天生成的柱形圖設定自身寬度為0.2,每一天的票房資料間隔為0.1

plt.rcParams["font.sans-serif"]=["Simhei"]
# 圖中如果某個軸的資料要顯示負數,設定如下.
plt.rcParams['axes.unicode_minus'] = False
# 如果對柱形寬度和偏移概念不深,可以嘗試修改偏移為0.2試試
width = 0.2
space = 0.1
plt.bar(data["影片名"],data["第一天票房"],width=width,label="day1")
plt.bar([i+(space*1) for i in range(len(data["影片名"]))],data["第二天票房"],width=width,label="day2")
plt.bar([i+(space*2) for i in range(len(data["影片名"]))],data["第三天票房"],width=width,label="day3")
plt.bar([i+(space*3) for i in range(len(data["影片名"]))],data["第四天票房"],width=width,label="day4")
plt.bar([i+(space*4) for i in range(len(data["影片名"]))],data["第五天票房"],width=width,label="day5")
plt.legend()
# xticks第一個引數代表了每個
plt.xticks([i+(space*2) for i in range(len(data["影片名"]))],data["影片名"].values.tolist())
plt.show()


優化版: 上面如果需要5天的票房比較,重複了5次.試著用迴圈遍歷plt.bar()

plt.rcParams["font.sans-serif"]=["Simhei"]
# 圖中如果某個軸的資料要顯示負數,設定如下.
plt.rcParams['axes.unicode_minus'] = False
# 如果對柱形寬度和偏移概念不深,可以嘗試修改偏移為0.2試試
width = 0.2
space = 0.1
rows_num = data.iloc[0,:].shape[0]
for j in range(1,rows_num):
    plt.bar([i+(space*j) for i in range(len(data["影片名"]))],data.iloc[:,j], width=width,label="day%i"%(j))
plt.legend()
# xticks第一個引數代表了每個
plt.xticks([i+(space*(rows_num/2)) for i in range(len(data["影片名"]))],data["影片名"].values.tolist())
plt.show()

橫向柱狀圖(條形圖) barh

plt.rcParams["font.sans-serif"]=["Simhei"]
# 圖中如果某個軸的資料要顯示負數,設定如下.
plt.rcParams['axes.unicode_minus'] = False
plt.barh(y=data["姓名"],width=data["分數"],height=0.5,label = "成績分數")
plt.legend(loc="best")
plt.ylabel(ylabel="學生名",rotation = 15)
plt.xlabel(xlabel="成績")
plt.title(label="一年級考試成績",fontsize=16,fontweight="bold")
plt.show()