垂直條形圖——plot.bar


垂直條形圖——plot.bar

1.條形圖的繪制方式plt.bar方法。plt.bar方法有以下常用參數:

x:一個數組或者列表,代表需要繪制的條形圖的x軸的坐標點。
height:一個數組或者列表,代表需要繪制的條形圖y軸的坐標點。
width:每一個條形圖的寬度,默認是0.8的寬度。
bottom:y軸的基線,默認是0,也就是距離底部為0.
align:對齊方式,默認是center,也就是跟指定的x坐標居中對齊,還有為edge,靠邊對齊,具體靠右邊還是靠左邊,看width的正負。
color:條形圖的顏色。

返回值為BarContainer,是一個存儲了條形圖的容器,而條形圖實際上的類型是matplotlib.patches.Rectangle對象

In [26]:
import matplotlib.pyplot as plt import pandas as pd import numpy as np from matplotlib import font_manager font = font_manager.FontProperties(fname=r"C:\Windows\Fonts\Dengb.ttf",size=10) #票房單位億元 movies = { "流浪地球":40.78, "飛馳人生":15.77, "瘋狂的外星人":20.83, "新喜劇之王":6.10, "廉政風雲":1.10, "神探蒲松齡":1.49, "小豬佩奇過大年":1.22, "熊出沒·原始時代":6.71 } x = list(movies.keys()) y = list(movies.values()) plt.figure(figsize=(12,8),facecolor=(0.8,0.9,0.9),dpi=200) plt.bar(x,y,width=0.6,bottom=1,color=(0.5,0.1,0.2),edgecolor='k') plt.xticks(fontproperties=font) plt.grid(axis='y')
out [26]:
 

用pandas傳入數據

In [2]:
movie_df = pd.DataFrame(data={'name':list(movies.keys()),'ticket':list(movies.values())}) movie_df 
Out [2]:
  name ticket
0 流浪地球 40.78
1 飛馳人生 15.77
2 瘋狂的外星人 20.83
3 新喜劇之王 6.10
4 廉政風雲 1.10
5 神探蒲松齡 1.49
6 小豬佩奇過大年 1.22
7 熊出沒·原始時代 6.71
In [3]:
plt.figure(figsize=(12,8),facecolor=(0.8,0.9,0.9),dpi=200) plt.bar('name','ticket',data=movie_df,width=0.6,bottom=0,color='k',edgecolor='k') font.set_size(10) plt.xticks(fontproperties=font) plt.yticks(range(0,50,5)) plt.grid(axis='y') for x,y in zip(movie_df['name'],movie_df['ticket']): plt.annotate(y,xy=(x,y),xytext=(x,y+3),arrowprops=dict(facecolor='g',shrink=0.05), bbox=dict(boxstyle='round,pad=0.5', fc='k', ec='k', lw=1, alpha=0.5)) plt.savefig("G:\matlib文件\條形圖用例.png")
out [3]:
 

垂直條形圖——plot.barh

橫向條形圖使用plt.barh:

y:數組或列表,代表需要繪制的條形圖在y軸上的坐標點。
width:數組或列表,代表需要繪制的條形圖在x軸上的值(也就是長度)。
height:條形圖的高度,默認是0.8。
left:條形圖的基線,也就是距離y軸的距離。

其他參數跟bar一樣。 返回值也是BarContainer容器對象。

In [24]:
x = list(movies.keys()) y = list(movies.values()) plt.figure(figsize=(12,8),facecolor=(0.8,0.9,0.9),dpi=200) plt.barh(x,y,color=(0.5,0.1,0.2)) plt.yticks(fontproperties=font,size=16) plt.grid(axis='x') for x,y in zip(movie_df['name'],movie_df['ticket']): plt.annotate(y,xy=(y,x),xytext=(y+1.5,x),arrowprops=dict(facecolor='g',shrink=0.05), bbox=dict(boxstyle='round,pad=0.5', fc='k', ec='k', lw=1, alpha=0.5)) plt.savefig("G:\matlib文件\橫向條形圖.png")
out [24]:
 

分組條形圖——plot.bars

In [5]:
movs = { "流浪地球":[2.01,4.59,7.99,11.83,16], "飛馳人生":[3.19,5.08,6.73,8.10,9.35], "瘋狂的外星人":[4.07,6.92,9.30,11.29,13.03], "新喜劇之王":[2.72,3.79,4.45,4.83,5.11], "廉政風雲":[0.56,0.74,0.83,0.88,0.92], "神探蒲松齡":[0.66,0.95,1.10,1.17,1.23], "小豬佩奇過大年":[0.58,0.81,0.94,1.01,1.07], "熊出沒·原始時代":[1.13,1.96,2.73,3.42,4.05] } mov_df = pd.DataFrame(movs) mov_df
Out [5]:
  流浪地球 飛馳人生 瘋狂的外星人 新喜劇之王 廉政風雲 神探蒲松齡 小豬佩奇過大年 熊出沒·原始時代
0 2.01 3.19 4.07 2.72 0.56 0.66 0.58 1.13
1 4.59 5.08 6.92 3.79 0.74 0.95 0.81 1.96
2 7.99 6.73 9.30 4.45 0.83 1.10 0.94 2.73
3 11.83 8.10 11.29 4.83 0.88 1.17 1.01 3.42
4 16.00 9.35 13.03 5.11 0.92 1.23 1.07 4.05
In [6]:
plt.figure(figsize=(15,5),facecolor=(0.8,0.9,0.9),dpi=200) '''for index in mov_df.index: series = mov_df.iloc[index] print(series) plt.bar(series.index,series.values)''' xticks = np.arange(0,len(movs)) bar_width = 0.15 plt.bar(xticks-2*bar_width,mov_df.iloc[0],width=bar_width) plt.bar(xticks-1*bar_width,mov_df.iloc[1],width=bar_width) plt.bar(xticks,mov_df.iloc[2],width=bar_width) plt.bar(xticks+1*bar_width,mov_df.iloc[3],width=bar_width) plt.bar(xticks+2*bar_width,mov_df.iloc[4],width=bar_width) plt.xticks(xticks,list(movs.keys()),fontproperties=font,size=13) plt.grid(axis='y')
out [6]:
In [7]:
plt.figure(figsize=(15,5),facecolor=(0.8,0.9,0.9),dpi=200) for index in mov_df.index: day_tickets = mov_df.iloc[index] xs = xticks-(bar_width*(2-index)) plt.bar(xticks+(-2+index)*bar_width,mov_df.iloc[index],width=bar_width,label="第%s天票房"%(index+1)) for ticket,x in zip(day_tickets,xs): plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.1,ticket+0.1)) plt.xticks(xticks,mov_df.columns,fontproperties=font,size=13) plt.grid() font.set_size(15) plt.legend(prop=font) plt.savefig("G:\matlib文件\分組條形圖用例.png")
out [7]:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM