python 畫條形圖(柱狀圖)實例
條形圖(bar chart),也稱為柱狀圖,是一種以長方形的長度為變量的統(tǒng)計圖表,長方形的長度與它所對應(yīng)的變量數(shù)值呈一定比例。
1. 豎放條形圖
畫條形圖要用到 pyplot 中的 bar 函數(shù),該函數(shù)的基本語法為:
bar(x, height, [width], **kwargs)
x | 數(shù)組,每個條形的橫坐標 |
---|---|
height | 個數(shù)或一個數(shù)組,條形的高度 |
[width] | 可選參數(shù),一個數(shù)或一個數(shù)組,條形的寬度,默認為 0.8 |
**kwargs | 不定長的關(guān)鍵字參數(shù),用字典形式設(shè)置條形圖的其他屬性 |
**kwargs 中常設(shè)置的參數(shù)包括圖形標簽 label,顏色標簽 color,不透明度 alpha 等。
假設(shè)某項針對男女大學(xué)生購買飲用水愛好的調(diào)查結(jié)果如下表:
男 | 女 | |
---|---|---|
碳酸飲料 | 6 | 9 |
綠茶 | 7 | 4 |
礦泉水 | 6 | 4 |
其他 | 2 | 6 |
果汁 | 1 | 5 |
總計 | 22 | 28 |
畫出男生飲用水情況的直方圖,代碼如下:
import matplotlib.pyplot as plt # 這兩行代碼解決 plt 中文顯示的問題 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False waters = ('碳酸飲料', '綠茶', '礦泉水', '果汁', '其他') buy_number = [6, 7, 6, 1, 2] plt.bar(waters, buy_number) plt.title('男性購買飲用水情況的調(diào)查結(jié)果') plt.show()
圖形:
2. 橫放條形圖
若要生成橫的條形圖,則可以使用 barh 函數(shù),其語法與 bar 函數(shù)非常類似。
bar(x, width, [height], **kwargs)
y | 數(shù)組,每個條形的縱坐標 |
---|---|
width | 一個數(shù)或一個數(shù)組,條形的寬度 |
[height] | 可選參數(shù),一個數(shù)或一個數(shù)組,條形的高度,默認為 0.8 |
**kwargs | 不定長的關(guān)鍵字參數(shù),用字典形式設(shè)置條形圖的其他屬性 |
代碼:
import matplotlib.pyplot as plt # 這兩行代碼解決 plt 中文顯示的問題 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False waters = ('碳酸飲料', '綠茶', '礦泉水', '果汁', '其他') buy_number = [6, 7, 6, 1, 2] plt.barh(waters, buy_number) # 橫放條形圖函數(shù) barh plt.title('男性購買飲用水情況的調(diào)查結(jié)果') plt.show()
3. 并列條形圖
若要將男生與女生的調(diào)查情況畫出兩個條形圖一塊顯示,則可以使用 bar 或 barh 函數(shù)兩次,并調(diào)整 bar 或 barh 函數(shù)的條形圖位置坐標以及相應(yīng)刻度,使得兩組條形圖能夠并排顯示。
import matplotlib.pyplot as plt import numpy as np # 這兩行代碼解決 plt 中文顯示的問題 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 輸入統(tǒng)計數(shù)據(jù) waters = ('碳酸飲料', '綠茶', '礦泉水', '果汁', '其他') buy_number_male = [6, 7, 6, 1, 2] buy_number_female = [9, 4, 4, 5, 6] bar_width = 0.3 # 條形寬度 index_male = np.arange(len(waters)) # 男生條形圖的橫坐標 index_female = index_male + bar_width # 女生條形圖的橫坐標 # 使用兩次 bar 函數(shù)畫出兩組條形圖 plt.bar(index_male, height=buy_number_male, width=bar_width, color='b', label='男性') plt.bar(index_female, height=buy_number_female, width=bar_width, color='g', label='女性') plt.legend() # 顯示圖例 plt.xticks(index_male + bar_width/2, waters) # 讓橫坐標軸刻度顯示 waters 里的飲用水, index_male + bar_width/2 為橫坐標軸刻度的位置 plt.ylabel('購買量') # 縱坐標軸標題 plt.title('購買飲用水情況的調(diào)查結(jié)果') # 圖形標題 plt.show()
補充知識:Python 條形圖與直方圖有非常大的區(qū)別
區(qū)別:
首先,條形圖是用條形的長度表示各類別頻數(shù)的多少,其寬度(表示類別)則是固定的;
直方圖是用面積表示各組頻數(shù)的多少,矩形的高度表示每一組的頻數(shù)或頻率,寬度則表示各組的組距,因此其高度與寬度均有意義。
其次,由于分組數(shù)據(jù)具有連續(xù)性,直方圖的各矩形通常是連續(xù)排列,而條形圖則是分開排列。
最后,條形圖主要用于展示分類數(shù)據(jù),而直方圖則主要用于展示數(shù)據(jù)型數(shù)據(jù),我們初中學(xué)的就是條形統(tǒng)計圖,很顯然有沒有當初那種感覺?(身高-年齡 條形統(tǒng)計圖)在坐標上畫出每個年齡對應(yīng)的頻數(shù)。這就是我們研究數(shù)據(jù)分布最喜歡用的。如果還是有點蒙,下面相同數(shù)據(jù)對比一下這兩種圖像你就會明白!
數(shù)據(jù):
年齡 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 總數(shù) |
人數(shù) | 3 | 6 | 7 | 11 | 13 | 18 | 15 | 11 | 7 | 5 | 4 | 100 |
條形統(tǒng)計圖(注重每類多少個): import matplotlib.pyplot as plt import numpy as np import pandas as pd plt.rcParams['font.sans-serif']=['SimHei'] #正常顯示中文 plt.rcParams['axes.unicode_minus']=False #正常顯示負號 # d=pd.read_excel('E:\Python\projects\data\data100.xlsx',header=None) # d=d[0] # d=list(d) ages=range(11) count=[3,6,7,11,13,18,15,11,7,5,4] plt.bar(ages,count, label='graph 1') # params # x: 條形圖x軸 # y:條形圖的高度 # width:條形圖的寬度 默認是0.8 # bottom:條形底部的y坐標值 默認是0 # align:center / edge 條形圖是否以x軸坐標為中心點或者是以x軸坐標為邊緣 plt.legend() plt.xlabel('ages') plt.ylabel('count') plt.title(u'測試例子——條形圖') for i in range(11): plt.text(i,count[i]+0.1,"%s"%count[i],va='center') plt.show()
直方圖:
import matplotlib.pyplot as plt import matplotlib.mlab as mlab import numpy as np import pandas as pd plt.rcParams['font.sans-serif']=['SimHei'] #正常顯示中文 plt.rcParams['axes.unicode_minus']=False #正常顯示負號 # d=np.random.normal(0,1,100) d=pd.read_excel('E:\Python\projects\data\data100.xlsx',header=None) d=d[0] d=list(d) print(d) n, bins, patches = plt.hist(x=d, bins=11, color='#0504aa', alpha=0.8, rwidth=0.6) #alpha 是顏色深度 rwidth 條形寬度,bins條形箱的數(shù)目 plt.grid(axis='y', alpha=0.4) #alpha 網(wǎng)格顏色深度 plt.xlabel('age') plt.ylabel('count') plt.title('100個樣本分布如下') plt.text(20, 40, r'$\mu=0, sigma=1$')#前面是坐標,寫字 # plt.ylim(19) #設(shè)置y的范圍 plt.show()
對比兩個圖就能知道,條形圖將類別對的死死的,但是直方圖就用間隔來劃分每一柱多少,雖然大體相差不大,但是對于數(shù)據(jù)研究那影響可大也可小??傊私饬藚^(qū)別才能避免不必要的犯錯。
以上這篇python 畫條形圖(柱狀圖)實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Elasticsearches的集群搭建及數(shù)據(jù)分片過程詳解
這篇文章主要為大家介紹了Elasticsearches的集群搭建及數(shù)據(jù)分片過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04Python實現(xiàn)監(jiān)控內(nèi)存使用情況和代碼執(zhí)行時間
我的代碼的哪些部分運行時間最長、內(nèi)存最多?我怎樣才能找到需要改進的地方?在開發(fā)過程中,我很確定我們大多數(shù)人都會想知道這一點。本文總結(jié)了一些方法來監(jiān)控?Python?代碼的時間和內(nèi)存使用情況,希望對大家有所幫助2023-01-01最簡化ChatGLM2-6b小白部署教程【windows系統(tǒng),16G內(nèi)存即可,對顯卡無要求,CPU運行】
這篇文章主要介紹了最簡化ChatGLM2-6b小白部署的方法,可以在windows系統(tǒng)環(huán)境下,16G內(nèi)存且對顯卡無要求,并以CPU模式運行,方便實現(xiàn)個人PC機環(huán)境下的部署體驗,需要的朋友可以參考下2023-07-07python刪除列表元素的三種方法(remove,pop,del)
這篇文章主要介紹了python刪除列表元素的三種方法(remove,pop,del),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2019-07-07詳解Python的Django框架中inclusion_tag的使用
這篇文章主要介紹了詳解Python的Django框架中inclusion_tag的使用,文中示例基于Python較早的2.x版本,希望能夠注意一下,需要的朋友可以參考下2015-07-07