Matplotlib繪圖專案(四):2017年內地電影和票房資料情況(條形圖)
阿新 • • 發佈:2018-11-21
需求:
- 繪製2017年內地電影票房前20的電影和票房資料情況條形圖
- 另外,單拎出4部電影,每部電影3天的票房資料, 展示電影本身的票房以及同其他電影的資料對比情況
難點:
- 條形圖語法
- x軸座標的寬度值如何選取
# 假設你獲取到了2017年內地電影票房前20的電影(列表a)和電影票房資料(列表b),那麼如何更加直觀的展示該資料?
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus' ] = False
# 不加u也可以
a = ["戰狼2","速度與激情8","功夫瑜伽","西遊伏妖篇","變形金剛5:最後的騎士","摔跤吧!爸爸","加勒比海盜5:死無對證","金剛:骷髏島",
"極限特工:終極迴歸","生化危機6: 終章","乘風破浪","神偷奶爸3","智取威虎山","大鬧天竺","金剛狼3:殊死一戰","蜘蛛俠:英雄歸來","悟空傳",
"銀河護衛隊2","情聖","新木乃伊"]
print(len(a),len(b))
_x = range(len(a))
b = [56.01,26.94,17.53,16.49,15.45,12.96 ,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
plt.figure(figsize=(20, 8), dpi = 80)
# rotation不用加度,數值就行
plt.xticks(_x,a, rotation = 45)
# width的預設寬度是0.8
plt.bar(_x, b, width = 0.5, color = 'pink')
plt.ylabel('電影票房(億)')
plt.title('2017年度內地電影票房top20')
plt.show()
# 需求:單拎出4部電影,每部電影3天的票房資料, 展示電影本身的票房以及同其他電影的資料對比情況
# 挑選出4部電影
a = ["猩球崛起3:終極之戰","敦刻爾克","蜘蛛俠:英雄歸來","戰狼2"]
print(len(a))
# 2017年9月14,15,16日三天,這4部電影的票房
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
# 0.3,就設為變數值,發現0.5就太寬了,就會和後面重合
bar_width = 0.2
x_14 = list(range(len(a)))
x_15 = [i+bar_width for i in x_14]
x_16 = [i+bar_width for i in x_15]
plt.figure(figsize = (20, 8), dpi = 80)
# 設完bar_width後,發現x軸座標還是有問題
# 寬度值調節,顏色調節,x軸的資料需要考慮到寬度
# plt.bar(a, b_14, width = 0.5, color = 'pink')
# plt.bar(a, b_15, width = 0.5, color = 'pink')
# plt.bar(a, b_16, width = 0.5, color = 'pink')
# 別忘了加label屬性
plt.bar(x_14, b_14, width = bar_width, color = 'pink', label = '9月14日')
plt.bar(x_15, b_15, width = bar_width, color = 'red', label = '9月15日')
plt.bar(x_16, b_16, width = bar_width, color = 'purple', label = '9月16日')
# 設定x軸刻度,中間的紅色的條形,用它來跟電影名相對應!
plt.xticks(x_15, a)
# 圖例
plt.legend(loc = 'upper right')
# 發現直方圖是沒有圖例的:No handles with labels found to put in legend.因為你在聯立時沒有加label屬性!!!沒加屬性自然不會有圖例
# 描述資訊
plt.xlabel('電影名')
plt.ylabel('電影票房(元)')
plt.title("選取4部電影比較3天票房資料")
plt.show()