Matplotlib條形圖之分組條形圖和堆疊條形圖詳解
分組條形圖
拓展一下問題復(fù)雜度:使用水平條形圖展示每位員工前三個月的銷售額。此時,我們需要將每位員工的銷售額按月分組,分別繪制條形圖進(jìn)行展示。
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負(fù)號 member = [u'小紅', u'小王', u'小李', u'小張'] sales_jan = [30, 42, 25, 35] # 一月銷售額 sales_feb = [60, 55, 10, 27] # 二月銷售額 sales_mar = [40, 20, 5, 68] # 三月銷售額 bar_width = 0.2 # 設(shè)置分組條形的寬度 # 繪圖 plt.bar(range(4), sales_jan, label=u'一月', width=bar_width, align='center', color='steelblue', alpha=0.7) # 也可以使用numpy模塊的arange()函數(shù)構(gòu)造橫坐標(biāo) plt.bar(np.arange(4) + bar_width, sales_feb, label=u'二月', color='indianred', alpha=0.7, width=bar_width) plt.bar(np.arange(4) + bar_width * 2, sales_mar, label=u'三月', color='green', alpha=0.7, width=bar_width) # 添加Y軸標(biāo)簽 plt.ylabel(u'月度銷售額(萬元)') # 添加標(biāo)題 plt.title(u'員工第一季度銷售額對比') # 添加刻度標(biāo)簽 plt.xticks(np.arange(4) + bar_width, member) # 添加圖例 plt.legend() plt.xlim(-0.5, 4.5) plt.show()

分組條形圖比簡單條形圖的復(fù)雜之處在于,在放數(shù)據(jù) x 軸坐標(biāo)和刻度位置時,需要進(jìn)行額外的計算和調(diào)整。在執(zhí)行坐標(biāo)的計算時,推薦使用 numpy ,因為它支持廣播機(jī)制,向量化的算術(shù)運算更加簡單。例如,上例中在設(shè)置第二個和第三個條形的 x 軸坐標(biāo)時,我們使用了 np.arange(4) + bar_width 和 np.arange(4) + bar_width * 2,而利用 Python 列表實現(xiàn)將十分復(fù)雜。
堆疊條形圖
堆疊條形圖是分組條形圖展示的另一種形式,它把分類的數(shù)據(jù)堆疊在一起,顯得更簡約緊密,同時提供了求和信息。在實現(xiàn)上,繪制的思路與條形圖相似,不過前者是垂直偏移,后者是水平偏移。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負(fù)號
member = [u'小紅', u'小王', u'小李', u'小張']
sales_jan = [30, 42, 25, 35] # 一月銷售額
sales_feb = [60, 55, 10, 27] # 二月銷售額
sales_mar = [40, 20, 5, 68] # 三月銷售額
bar_width = 0.2 # 設(shè)置分組條形的寬度
# 繪圖
plt.bar(np.arange(4), sales_jan, label=u'一月', color='steelblue', alpha=0.7)
plt.bar(np.arange(4), sales_feb, bottom=sales_jan, label=u'二月', color='indianred', alpha=0.7)
plt.bar(np.arange(4), sales_mar, bottom=np.array(sales_jan) + np.array(sales_feb), label=u'三月', color='green',
alpha=0.7)
# 添加Y軸標(biāo)簽
plt.ylabel(u'月度銷售額(萬元)')
# 添加標(biāo)題
plt.title(u'員工第一季度銷售額對比')
# 添加刻度標(biāo)簽
plt.xticks(np.arange(4), member)
# 添加圖例
plt.legend()
plt.xlim(-0.5, 4.5)
plt.show()

這里有兩點非常關(guān)鍵:一是 botom 選項的使用讓數(shù)據(jù)在該基礎(chǔ)之上有一個偏移;二是 NumPy 模塊 array()函數(shù)的使用,將列表類型的數(shù)據(jù)轉(zhuǎn)換為 ndarray ,以便元素級別(向量化)運算。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python實現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實例
下面小編就為大家?guī)硪黄狿ython實現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
python3中bytes和string之間的互相轉(zhuǎn)換
這篇文章主要介紹了python3中bytes和string之間的互相轉(zhuǎn)換,文中給出了詳細(xì)的介紹和示例代碼,相信對大家具有一定的參考價值,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-02-02
pytorch環(huán)境配置及安裝圖文詳解(包括anaconda的安裝)
這篇文章主要介紹了pytorch環(huán)境配置及安裝圖文詳解(包括anaconda的安裝),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
使用Python解析FineReport模板數(shù)據(jù)集
這篇文章主要為大家詳細(xì)介紹了如何使用Python解析FineReport模板數(shù)據(jù)集,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下2023-12-12
Python?中設(shè)置請求的最大重試次數(shù)示例代碼
本篇文章介紹了為什么我們會收到錯誤消息,指出超出了最大重試次數(shù),以及我們?nèi)绾卧?Python?中為請求設(shè)置?max_retries,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-06-06
python 將字符串中的數(shù)字相加求和的實現(xiàn)
這篇文章主要介紹了python 將字符串中的數(shù)字相加求和的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
【Python】Python的urllib模塊、urllib2模塊批量進(jìn)行網(wǎng)頁下載文件
這篇文章主要介紹了Python的urllib模塊、urllib2模塊批量進(jìn)行網(wǎng)頁下載文件,就是一個簡單的從網(wǎng)頁抓取數(shù)據(jù)、下載文件的小程序,需要的可以了解一下。2016-11-11

