matplotlib條形圖|柱狀圖

條形圖:

#適用於不連續的數據

#正常繪圖,條形圖是豎着的,坐落在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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章