散點圖
需求
我們獲得北京2016年三月和十月每天白天最高氣溫,我們現在需要找出氣溫隨時間變化的某種規律。
代碼
# 導入庫
from matplotlib import pyplot as plt
import random# 解決中文亂碼
import matplotlib
matplotlib.rc("font",family="FangSong")# 初始化數據
y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
y=y_3+y_10# 調整畫布屬性
plt.figure(figsize=(20,8),dpi=200)# 調整x/y軸的屬性
x_3=range(1,32)
x_10=range(51,82)x=list(x_3)+list(x_10)
x_ticks=["三月{}日".format(i) for i in x_3]
x_ticks+=["十月{}日".format(i-50) for i in x_10]plt.xticks(x[::2],x_ticks[::2],rotation=45)
plt.yticks(range(min(y),max(y)+1))# 添加描述信息
plt.xlabel("日期")
plt.ylabel("溫度(攝氏度)")# 繪制散點圖
plt.scatter(x_3,y_3,label="三月")
plt.scatter(x_10,y_10,label="十月")
plt.legend()# 展示散點圖
plt.show()
效果
說明
散點圖和折線圖很多一樣,就是把最后的plt.plot
改成plt.scatter
即可
條形圖
需求
假如你獲取到2017年內地電影票房前20的電影和電影票房數據
第一版
代碼
from matplotlib import pyplot as plt
import matplotlib# 解決中文亂碼
matplotlib.rc("font",family="FangSong")# 初始化數據
x = ["戰狼2","速度與激情8","功夫瑜伽","西游伏妖篇","變形金剛5:最后的騎士","摔跤吧!爸爸","加勒比海盜5:死無對證","金剛:骷髏島","極限特工:終極回歸","生化危機6:終章","乘風破浪","神偷奶爸3","智取威虎山","大鬧天竺","金剛狼3:殊死一戰","蜘蛛俠:英雄歸來","悟空傳","銀河護衛隊2","情圣","新木乃伊",]y = [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=200)# 設置x軸
plt.xticks(range(len(x)),x,rotation=270)# 繪制條形圖
plt.bar(range(len(x)),y,color="b")
plt.show()
效果
說明
和折線圖沒什么改變,就是在最后繪制時(plt.bar
)傳參數時只能傳含數字的可迭代對象(說人話就是,傳一個數字列表,對應x軸和y軸數據)
第二版
代碼
from matplotlib import pyplot as plt
import matplotlib# 解決中文亂碼
matplotlib.rc("font",family="FangSong")# 初始化數據
x = ["戰狼2","速度與激情8","功夫瑜伽","西游伏妖篇","變形金剛5:最后的騎士","摔跤吧!爸爸","加勒比海盜5:死無對證","金剛:骷髏島","極限特工:終極回歸","生化危機6:終章","乘風破浪","神偷奶爸3","智取威虎山","大鬧天竺","金剛狼3:殊死一戰","蜘蛛俠:英雄歸來","悟空傳","銀河護衛隊2","情圣","新木乃伊",]y = [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=200)
plt.yticks(range(len(x)),x)# 將圖形橫過來
plt.barh(range(len(x)),y,height=0.3,color="orange")# 設置網格
plt.grid(alpha=.4)plt.show()
效果
說明
把圖形橫過來數據會更加直觀,我們只需要將plt.ba
r改成plt.barh
即可
進階練習
需求
假設你知道四個電影分別在2017-09-14,2017-09-15,2017-09-16三天的票房,為了展示列表中電影本身的票房以及同其他電影的數據對比情況。
代碼
from matplotlib import pyplot as plt
import matplotlib# 解決中文亂碼
matplotlib.rc("font",family="FangSong")# 初始化數據x = ["猩球崛起3:終極之戰","敦刻爾克","蜘蛛俠:英雄歸來","戰狼2"]
y_16 = [15746,312,4497,319]
y_15 = [12357,156,2045,168]
y_14 = [2358,399,2358,362]plt.figure(figsize=(20,8),dpi=200)# 設置偏移量
bar_width=0.2# 設置每個日期條形塊的位置
# x_14在最左邊,然后x_15在x_14右邊,x_16在x_15右邊,依次偏移
x_14=list(range(len(x)))
x_15=[i+bar_width for i in x_14]
x_16=[i+bar_width*2 for i in x_14]# 設置x軸刻度
plt.xticks(x_15,x)# 繪制條形圖,因為有三個日期,所以要繪制三次
plt.bar(x_14,y_14,width=bar_width,label="九月十四日")
plt.bar(x_15,y_15,width=bar_width,label="九月十五日")
plt.bar(x_16,y_16,width=bar_width,label="九月十六日")# 設置標簽
plt.xlabel("電影")
plt.ylabel("票房")
plt.title("九月十四日至十六日電影票房變化")plt.legend()
plt.show()
效果
說明
這個條形圖有點復雜,主要是畫三個條形圖在一張畫布上。我們要設置每個條形圖的偏移量,使得這些條形圖不重疊