python-Matplotlib庫
阿新 • • 發佈:2021-09-04
垂直柱狀圖 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()