天天看點

Matplotlib - 柱狀圖、直方圖、條形圖 bar() & barh() 所有用法詳解

目錄

基本用法 

多個直方圖并列顯示

顯示直方圖上的數值

多個直方圖堆疊顯示

水準直方圖

相較散點圖和折線圖,柱狀圖(直方圖、條形圖)、餅圖、箱線圖是另外 3 種資料分析常用的圖形,主要用于分析資料内部的分布狀态或分散狀态。

柱狀圖(直方圖、條形圖)主要用于檢視各分組資料的數量分布,以及各個分組資料之間的數量比較。

Matplotlib 中繪制柱狀圖(直方圖、條形圖)的函數為 bar() ,使用文法如下:

atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

常用參數及說明: 

參數 接收值 說明 預設值
left array x 軸;
height array 柱形圖的高度,也就是y軸的數值;
alpha 數值 柱形圖的顔色透明度 ; 1
width 數值 柱形圖的寬度;  0.8
color(facecolor) string 柱形圖填充的顔色;  随機色
edgecolor string 圖形邊緣顔色  None
label string 解釋每個圖像代表的含義 
linewidth(linewidths / lw) 數值 邊緣or線的寬度 1

bar() 其他參數請參考文檔:https://matplotlib.org/api/pyplot_api.html 

基本用法 

import pandas as pd
import matplotlib.pyplot as plt

#讀取資料
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)

plt.figure(figsize=(10,5))#設定畫布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标題,并設定字号大小
plt.xlabel(u'x-year',fontsize=14)#設定x軸,并設定字号大小
plt.ylabel(u'y-income',fontsize=14)#設定y軸,并設定字号大小

#alpha:透明度;width:柱子的寬度;facecolor:柱子填充色;edgecolor:柱子輪廓色;lw:柱子輪廓的寬度;label:圖例;
plt.bar(data['時間'],data['收入_Jay'], alpha=0.6,width = 0.8,  facecolor = 'deeppink', edgecolor = 'darkblue', lw=1, label='Jay income')

plt.legend(loc=2)#圖例展示位置,數字代表第幾象限
plt.show()#顯示圖像
           
Matplotlib - 柱狀圖、直方圖、條形圖 bar() & barh() 所有用法詳解

多個直方圖并列顯示

 通過bar() 中的  width 參數來調節:

import pandas as pd
import matplotlib.pyplot as plt

#讀取資料
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)

plt.figure(figsize=(10,5))#設定畫布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标題,并設定字号大小
plt.xlabel(u'x-year',fontsize=14)#設定x軸,并設定字号大小
plt.ylabel(u'y-income',fontsize=14)#設定y軸,并設定字号大小

width_val = 0.4 #若顯示 n 個柱狀圖,則width_val的值需小于1/n ,否則柱形圖會有重合

#alpha:透明度;width:柱子的寬度;facecolor:柱子填充色;edgecolor:柱子輪廓色;lw:柱子輪廓的寬度;label:圖例;
plt.bar(data['時間'],data['收入_Jay'], alpha=0.6,width = width_val,  facecolor = 'deeppink', edgecolor = 'deeppink', lw=1, label='Jay income')
plt.bar(data['時間']+width_val,data['收入_JJ'], alpha=0.6,width = width_val,  facecolor = 'darkblue', edgecolor = 'darkblue', lw=1, label='JJ income')

plt.legend(loc=2)#圖例展示位置,數字代表第幾象限
plt.show()#顯示圖像
           
Matplotlib - 柱狀圖、直方圖、條形圖 bar() & barh() 所有用法詳解

顯示直方圖上的數值

import pandas as pd
import matplotlib.pyplot as plt

#讀取資料
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)

plt.figure(figsize=(10,5))#設定畫布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标題,并設定字号大小
plt.xlabel(u'x-year',fontsize=14)#設定x軸,并設定字号大小
plt.ylabel(u'y-income',fontsize=14)#設定y軸,并設定字号大小

width_val = 0.4 #若顯示 n 個柱狀圖,則width_val的值需小于1/n ,否則柱形圖會有重合
#alpha:透明度;width:柱子的寬度;facecolor:柱子填充色;edgecolor:柱子輪廓色;lw:柱子輪廓的寬度;label:圖例;
rects_Jay = plt.bar(data['時間'],data['收入_Jay'], alpha=0.6,width = width_val, facecolor = 'deeppink', label='Jay income')
rects_JJ = plt.bar(data['時間']+width_val,data['收入_JJ'], alpha=0.6,width = width_val, facecolor = 'darkblue',label='JJ income')

# 添加資料标簽 就是矩形上面的數值
def add_labels(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width()/2, height, height, ha='center', va='bottom')
        rect.set_edgecolor('white')

add_labels(rects_Jay)
add_labels(rects_JJ)

plt.legend(loc=2)#圖例展示位置,數字代表第幾象限
plt.show()#顯示圖像
           
Matplotlib - 柱狀圖、直方圖、條形圖 bar() & barh() 所有用法詳解

多個直方圖堆疊顯示

通過bar() 中的  bottom 參數來調節:

import pandas as pd
import matplotlib.pyplot as plt

#讀取資料
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)

plt.figure(figsize=(10,5))#設定畫布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标題,并設定字号大小
plt.xlabel(u'x-year',fontsize=14)#設定x軸,并設定字号大小
plt.ylabel(u'y-income',fontsize=14)#設定y軸,并設定字号大小

#通過bottom使得兩個柱狀圖堆疊顯示,且沒有交叉
#alpha:透明度;width:柱子的寬度;facecolor:柱子填充色;edgecolor:柱子輪廓色;lw:柱子輪廓的寬度;label:圖例;
plt.bar(data['時間'],data['收入_Jay'], alpha=0.6,width = width_val,  facecolor = 'deeppink', edgecolor = 'deeppink', lw=1, label='Jay income')
plt.bar(data['時間'],data['收入_JJ'], bottom=data['收入_Jay'], alpha=0.6,width = width_val,  facecolor = 'darkblue', edgecolor = 'darkblue', lw=1, label='JJ income')

plt.legend(loc=2)#圖例展示位置,數字代表第幾象限
plt.show()#顯示圖像
           
Matplotlib - 柱狀圖、直方圖、條形圖 bar() & barh() 所有用法詳解

水準直方圖

通過 barh() 函數實作,與 bar() 函數的主要差別是:在 bar() 函數中,width 這一參數代表的是柱子的寬度(胖瘦),而在 barh() 函數中 width 這一參數代表的是橫向柱子的長度(長短),在下面代碼中,width = data['收入_Jay']。

Matplotlib 中繪制水準柱狀圖(直方圖、條形圖)的函數為 barh() ,使用文法如下:

matplotlib.pyplot.

barh

(y, width, height=0.8, left=None, *, align='center', **kwargs)

參數請參考文檔:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.barh.html?highlight=barh#matplotlib.pyplot.barh

import pandas as pd
import matplotlib.pyplot as plt

#讀取資料
datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx'
data = pd.read_excel(datafile)

plt.figure(figsize=(10,5))#設定畫布的尺寸
plt.title('Examples of Histogram',fontsize=20)#标題,并設定字号大小
plt.xlabel(u'x-year',fontsize=14)#設定x軸,并設定字号大小
plt.ylabel(u'y-income',fontsize=14)#設定y軸,并設定字号大小

#alpha:透明度;facecolor:柱子填充色;edgecolor:柱子輪廓色;lw:柱子輪廓的寬度;label:圖例;
plt.barh(data['時間'],data['收入_Jay'], alpha=0.6, facecolor = 'deeppink', edgecolor = 'deeppink', label='Jay income')

plt.legend(loc=4)#圖例展示位置,數字代表第幾象限
plt.show()#顯示圖像
           
Matplotlib - 柱狀圖、直方圖、條形圖 bar() & barh() 所有用法詳解

如果還有直方圖的其他花樣,歡迎留言,我們一起探讨。