使用柱狀圖顯示三日電影的票房信息app
要顯示的數據爲2018年12月7日-9日四場電影的票房信息函數
四場電影分別爲:無名之輩,狗十三,毒液:知名守衛者,憨豆特工3字體
2018年12月7日四場電影票房分別爲:[991.94, 375.64, 200.48, 73.27]spa
2018年12月8日四場電影票房分別爲:[1908.22, 547.61, 466.23, 193.8]3d
2018年12月9日四場電影票房分別爲:[1532.87, 525.63, 332.35, 170.57]code
本次繪圖思路:blog
一、x軸使用日期做爲度量值,y軸使用票房做爲度量值;全部要對原始數據進行相應的修改圖片
二、使用plt.figure()函數來調整圖片的大小ip
本文使用說明:plt.figure(figsize=(20, 8), dpi=80);意思是x軸長度爲20英尺,y軸長度爲8英尺,dpi是用來設置像素的
三、使用plt.bar()函數來繪製柱狀圖,該函數能夠屢次調用,有疊加效果utf-8
本文使用說明:plt.bar(x_1, y_1, width=bar_width, label="無名之輩", color='#87CEFA');這個函數能夠調用的參數有不少,其中x,y值爲必備的參數,x,y的長度必須一一對應才能繪製,width設置柱狀圖的寬度,label設置這個柱狀圖的標籤,要調用plt.legend()函數才能顯示出來,color這個參數是設置柱狀圖的顏色的,能夠直接寫顏色的名稱,可是本人推薦使用顏色代碼比較方便,也不會出錯。
四、由於matplotlib默認顯示不出中文,爲了要顯示中文,因此要設置本身的字體,設置字體的方式有多種,本文使用的環境爲window10,此處設置的方式能夠保證對window10環境有效
先導入相應的包:from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/simsun.ttc") # 這裏面的C:/Windows/Fonts/simsun.ttc爲本身電腦存放字體的路徑,這樣就能夠設置任意本身想要的字體了。
使用字體的方式:在要顯示中文的地方,好比:plt.xticks(x_tick, xtick_label, fontproperties=my_font, fontsize=15)中,將fontproperties屬性設置爲自定義的字體
注意:plt.legend(prop=my_font, loc=5)函數是將prop屬性設置爲自定義字體,其餘的都是fontproperties屬性
五、使用plt.xticks()和plt.yticks函數設置x軸和y軸的刻度信息
本文使用說明:plt.xticks(x_tick, xtick_label, fontproperties=my_font, fontsize=15);你們能夠ctrl+b查看函數源代碼。在本文中,x_tick和xtick_label長度一一對應,x_tick是一個列表,意思是在x_tick[i]的下方寫上xtick_label[i0]的信息,也就是把你要刻畫在x軸上的信息存儲在xtick_label列表上,fontproperties屬性設置中文不要亂碼用的,fontsize設置文字大小,你們調一下就知道怎麼用了。
六、使用plt.ylabel()和plt.xlabel()和plt.title()函數設置圖片中的標籤信息;
七、使用plt.grid(alpha=0.3)函數能夠設置圖片背後有網格,alpha設置透明度,alpha的取值爲0到1,越小網格透明度越高
八、使用plt.text()函數能夠在繪製的圖片任何地方添加描述信息,本文使用該函數用來顯示每日票房的具體數值。該函數感受很是很是有用,你們能夠去看下該函數的用法
九、使用plt.savefig('T2.png')函數能夠把繪製的圖片保存下來
十、使用plt.show()直接顯示該圖片
下面就是源代碼了,第一次寫博客,本身也是剛學matplotlib,若有錯誤,請各位指出,共同交流共同進步
1 # coding = utf-8 2 from matplotlib import pyplot as plt 3 from matplotlib import font_manager 4 # 設置本身的字體 5 my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/simsun.ttc") 6 7 # 將數據存儲爲列表 8 a = ["無名之輩", "狗十三", "毒液:致命守護者", "憨豆特工3"] 9 b_7 = [991.94, 375.64, 200.48, 73.27] 10 b_8 = [1908.22, 547.61, 466.23, 193.8] 11 b_9 = [1532.87, 525.63, 332.35, 170.57] 12 13 # 此處是爲了將數據換一種方式存儲,一開始b_7存儲的是7號的的4部電影的票房數據,通過轉換後y1存儲了無名之輩的7號,8號,9號的票房數據 14 b = b_7 + b_8 + b_9 15 y_1 = [] 16 y_2 = [] 17 y_3 = [] 18 y_4 = [] 19 for i in range(len(b)): 20 if i % 4 == 0: 21 y_1.append(b[i]) 22 elif i % 4 == 1: 23 y_2.append(b[i]) 24 elif i % 4 == 2: 25 y_3.append(b[i]) 26 else: 27 y_4.append(b[i]) 28 29 # 此處設置bar_width是爲了避免要讓柱狀圖重疊 30 # 原本一次plt.bar(x,y)函數繪製一個直方圖,而後要繪製4個的話,爲了不重疊掉,就要設置必定的間距 31 bar_width = 0.2 32 x_1 = [i for i in range(3)] 33 x_2 = [i+bar_width for i in x_1] 34 x_3 = [i+bar_width*2 for i in x_1] 35 x_4 = [i+bar_width*3 for i in x_1] 36 37 # 設置圖像大小 38 plt.figure(figsize=(20, 8), dpi=80) 39 40 # 繪製直方圖 41 plt.bar(x_1, y_1, width=bar_width, label="無名之輩", color='#87CEFA') 42 plt.bar(x_2, y_2, width=bar_width, label="狗十三", color='#ADFF2F') 43 plt.bar(x_3, y_3, width=bar_width, label="毒液:\n致命守護者", color='#FFD700') 44 plt.bar(x_4, y_4, width=bar_width, label="憨豆特工3", color='#FFFACD') 45 46 # 添加圖例 47 plt.legend(prop=my_font, loc=5) 48 49 #調整x和y的刻度 50 x_tick = [i+0.1 for i in x_2] 51 xtick_label = ['12月7日', '12月8日', '12月9日'] 52 plt.xticks(x_tick, xtick_label, fontproperties=my_font, fontsize=15) 53 plt.yticks(fontsize=15) 54 55 # 添加描述信息 56 # plt.xlabel("日期", fontproperties=my_font, fontsize=20) 57 plt.ylabel("票房(億元)", fontproperties=my_font, fontsize=20) 58 plt.title("電影票房", fontproperties=my_font, fontsize=20) 59 60 # 繪製網格,alpha設置透明度 61 plt.grid(alpha=0.3) 62 63 # 添加折線圖的描述信息,text(x, y, s, fontdict=None, withdash=False, **kwargs)其中s爲描述信息的文字 64 xa = x_1 + x_2 + x_3 + x_4 65 yb = y_1 + y_2 + y_3 + y_4 66 for a1, b1 in zip(xa, yb): 67 plt.text(a1, b1, b1, ha='center', va='bottom', fontsize=14) 68 69 plt.savefig('T2.png') 70 plt.show()
顯示效果以下圖: