條形圖:
#適用於不連續的數據
#正常繪圖,條形圖是豎着的,坐落在x軸上
plt.bar()
#條形圖是橫着的,坐落在y軸上
plt.barh()
#其餘繪製過程使用的函數和折線圖一樣
單組數據繪製條形圖:
單個條形圖的繪製過程和折線圖類似,除了繪圖函數使用plt.bar()或者plt.barh()外,其他繪圖過程使用的函數一樣。
import matplotlib
from matplotlib import pyplot as plt
import random
font = {'family': 'STKAITI',
'weight': 'bold',
'size': '10'}
matplotlib.rc("font", **font)
my_font = matplotlib.font_manager.FontProperties(fname="C:\Windows\Fonts\STKAITI.TTF", size=12)
#得到x、y的刻度
a = ["戰狼2","速度與激情8","功夫瑜伽","西遊伏妖篇","變形金剛5:最後的騎士","摔跤吧!爸爸","加勒比海盜5:死無對證","金剛:骷髏島","極限特工:終極迴歸","生化危機6:終章","乘風破浪","神偷奶爸3","智取威虎山","大鬧天竺","金剛狼3:殊死一戰","蜘蛛俠:英雄歸來","悟空傳","銀河護衛隊2","情聖","新木乃伊",]
x = list(range(1, len(a)+1))
#單位:億
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]
y = b
#圖片大小
#plt.figure(figsize=(20, 15), dpi=100)
#繪製x、y軸刻度
x_label = a
y_label = [i*5 for i in range(13)]
plt.xticks(y_label)
plt.yticks(x, x_label)
#繪製圖的描述信息
plt.xlabel("票房數 (單位:億美元)")
plt.ylabel("電影名", fontproperties=my_font)
plt.title("2017年內地票房top20票房情況")
#繪圖
plt.barh(x, y, height=0.8)
plt.grid(alpha=0.3)
plt.show()
同一個圖上繪製多組數據的條形圖(表達的不太直觀,具體看實現效果):
‘’’
任務要求:
假設你知道了列表a中電影分別在2017-09-14(b_14), 2017-09-15(b_15), 2017-09-16(b_16)三天的票房,爲了展示列表中電影本身的票房以及同其他電影的數據對比情況,應該如何更加直觀的呈現該數據?
a = [“猩球崛起3:終極之戰”,“敦刻爾克”,“蜘蛛俠:英雄歸來”,“戰狼2”]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
數據來源: http://www.cbooo.cn/movieday
‘’’
####################將同一日的不同電影的條形圖放一塊兒對比:
#設置中文字體:
font = {"family": "STKAITI",
"weight": "bold",
"size": "12"
}
matplotlib.rc("font", **font)
#得到x、y軸的座標
a = ["猩球崛起3:終極之戰","敦刻爾克","蜘蛛俠:英雄歸來","戰狼2"]
b_16 = [15746, 312, 4497, 319]
b_15 = [12357, 156, 2045, 168]
b_14 = [2358, 399, 2358, 362]
x_14 = list(range(1, 5))
def add10(ll):
ans = []
for i in ll:
ans.append(i+10)
return ans
x_15 = add10(x_14)
x_16 = add10(x_15)
#設置x、y軸刻度文字
x = x_14 + x_15 + x_16
x_label = a*3
plt.yticks(x, x_label)
#設置圖形描述信息
plt.xlabel("電影名")
plt.ylabel("電影票房 (單位 美元)")
plt.title("14、15、16三日top4票房銷售情況")
#繪圖:
plt.barh(x_14, b_14, color=["orange", "blue", "black", "red"], label=a)
plt.barh(x_15, b_15, color=["orange", "blue", "black", "red"], label=a)
plt.barh(x_16, b_16, color=["orange", "blue", "black", "red"], label=a)
plt.show()
#############同一個電影的不同日期的票房情況放在一起
a = ["猩球崛起3:終極之戰","敦刻爾克","蜘蛛俠:英雄歸來","戰狼2"]
b_16 = [15746, 312, 4497, 319]
b_15 = [12357, 156, 2045, 168]
b_14 = [2358, 399, 2358, 362]
#得到x、y軸座標
width = 0.3
x_14 = list(range(1, 9, 2))
x_15 = [i+width for i in x_14]
x_16 = [i+width for i in x_15]
y = list(range(0, 16500, 1000))
#設置x、y軸座標軸
plt.xticks(x_15, a)
plt.yticks(y)
#圖描述信息
plt.xlabel("電影名")
plt.ylabel("票房數 (單位 美元)")
plt.title("14、15、16三日top4電影票房情況")
#繪圖
plt.bar(x_14, b_14, width=width, label="9月14日")
plt.bar(x_15, b_15, width=width, label="9月15日")
plt.bar(x_16, b_16, width=width, label="9月16日")
plt.legend()
plt.grid(alpha=0.3)
plt.show()