matplotlib入門-條形圖

條形圖是日常畫圖中最常使用的圖形之一

簡單模板

首先看一個簡單的模板,條形圖一般分爲豎向和橫向兩種,如果圖中有負數的話,最好畫一條橫線或者豎線,可以讓圖看起來更加完整和美觀,如下:

plt.figure(figsize=(10,8))

#正常柱形圖
plt.subplot(221)
plt.bar(x,y,color='red')

#正常柱形圖,x=0處加橫線
plt.subplot(222)
plt.bar(x,y,color='red')
plt.axhline(0,color='grey',linewidth=2)

#橫向條形圖
plt.subplot(223)
plt.barh(x,y,color='red')

#橫向條形圖,y=0處加橫線
plt.subplot(224)
plt.barh(x,y,color='red')
plt.axvline(0,color='grey',linewidth=2)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Y4SsmYPN-1593410038451)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p107)]

負數區分

當然如果圖表中有負數的話,我們最好是用不同的顏色進行區分

v_bars = plt.bar(x,y,color='lightblue',alpha=0.6)
plt.axhline(0,color='grey',linewidth=2)
for bar,height in zip(v_bars,y):
    if height < 0:
        bar.set(edgecolor = 'darkred',color = 'green',linewidth = 3,alpha=0.6)
plt.show()

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7xck1oXK-1593410038455)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p108)]

顏色填充

x = np.linspace(0,10,200)
y1 = 2*x +1
y2 = 3*x +1.2
y_mean = 0.5*x*np.cos(2*x) + 2.5*x +1.1
fig,ax = plt.subplots()
#設定填充位置
ax.fill_between(x,y1,y2,color='red')
ax.plot(x,y_mean,color='black')
plt.show()

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7fcHTl6n-1593410038456)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p109)]

查看數據差異

比如我們有三組數據,想看下每組數據的均值及方差情況

x1=[2,3,4]
x2=[3,4,6]
x3=[4,6,7]

mean_values=[np.mean(x1),np.mean(x2),np.mean(x3)]
std_values=[np.std(x1),np.std(x2),np.std(x3)]



bar_label = ['x1','x2','x3']

x_pos = list(range(len(bar_label)))
plt.bar(x_pos,mean_values,yerr=std_values,alpha=0.3)
max_y = max(zip(mean_values,std_values))
plt.ylim([0,(max_y[0]+max_y[1])*1.2])
plt.ylabel('std_values')
plt.xticks(x_pos,bar_label)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-TPCA4SzB-1593410038458)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p110)]

對比圖

在一組數據中,我們以最小值爲參照,顯示其他組數據的增長變化情況

#構造數據
data = range(200, 225, 5)
#設定一個標籤
bar_labels = ['a', 'b', 'c', 'd', 'e']

fig = plt.figure(figsize=(10,8))
#位置
y_pos = np.arange(len(data))
#基本圖形
bars = plt.barh(y_pos,data,alpha = 0.5,color='g')
#y軸標籤
plt.yticks(y_pos, bar_labels, fontsize=16)
#對比線
plt.vlines(min(data),-1,len(data)+0.5,linestyle = 'dashed')
#數據標籤
for b,d in zip(bars,data):
    plt.text(b.get_width()+b.get_width()*0.05,b.get_y()+b.get_height()/2,'{0:.2%}'.format(d/min(data)))
plt.show()

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WGjppusg-1593410038460)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p111)]

圖形填充

#填充標示
patterns = ('-', '+', 'x', '\\', '*', 'o', 'O', '.')

fig = plt.gca()

mean_value = range(1,len(patterns)+1)
x_pos = list(range(len(mean_value)))

bars = plt.bar(x_pos,mean_value,color='b',alpha=0.3)

for bar,pattern in zip(bars,patterns):
    bar.set_hatch(pattern)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mHLZ0EoP-1593410038462)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p112)]

完整代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章