Matplotlib條形圖之分組條形圖和堆疊條形圖詳解
分組條形圖
拓展一下問題復雜度:使用水平條形圖展示每位員工前三個月的銷售額。此時,我們需要將每位員工的銷售額按月分組,分別繪制條形圖進行展示。
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號 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 # 設置分組條形的寬度 # 繪圖 plt.bar(range(4), sales_jan, label=u'一月', width=bar_width, align='center', color='steelblue', alpha=0.7) # 也可以使用numpy模塊的arange()函數(shù)構造橫坐標 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軸標簽 plt.ylabel(u'月度銷售額(萬元)') # 添加標題 plt.title(u'員工第一季度銷售額對比') # 添加刻度標簽 plt.xticks(np.arange(4) + bar_width, member) # 添加圖例 plt.legend() plt.xlim(-0.5, 4.5) plt.show()
分組條形圖比簡單條形圖的復雜之處在于,在放數(shù)據(jù) x
軸坐標和刻度位置時,需要進行額外的計算和調整。在執(zhí)行坐標的計算時,推薦使用 numpy ,因為它支持廣播機制,向量化的算術運算更加簡單。例如,上例中在設置第二個和第三個條形的 x
軸坐標時,我們使用了 np.arange(4) + bar_width
和 np.arange(4) + bar_width * 2
,而利用 Python 列表實現(xiàn)將十分復雜。
堆疊條形圖
堆疊條形圖是分組條形圖展示的另一種形式,它把分類的數(shù)據(jù)堆疊在一起,顯得更簡約緊密,同時提供了求和信息。在實現(xiàn)上,繪制的思路與條形圖相似,不過前者是垂直偏移,后者是水平偏移。
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號 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 # 設置分組條形的寬度 # 繪圖 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軸標簽 plt.ylabel(u'月度銷售額(萬元)') # 添加標題 plt.title(u'員工第一季度銷售額對比') # 添加刻度標簽 plt.xticks(np.arange(4), member) # 添加圖例 plt.legend() plt.xlim(-0.5, 4.5) plt.show()
這里有兩點非常關鍵:一是 botom
選項的使用讓數(shù)據(jù)在該基礎之上有一個偏移;二是 NumPy 模塊 array()
函數(shù)的使用,將列表類型的數(shù)據(jù)轉換為 ndarray
,以便元素級別(向量化)運算。
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
Python中defaultdict與lambda表達式用法實例小結
這篇文章主要介紹了Python中defaultdict與lambda表達式用法,結合實例形式分析了Python中defaultdict與lambda表達式的功能、使用方法及相關注意事項,需要的朋友可以參考下2018-04-04Jupyter Notebook添加代碼自動補全功能的實現(xiàn)
這篇文章主要介紹了Jupyter Notebook添加代碼自動補全功能的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01Android基于TCP和URL協(xié)議的網(wǎng)絡編程示例【附demo源碼下載】
這篇文章主要介紹了Android基于TCP和URL協(xié)議的網(wǎng)絡編程,結合實例形式分析了Android網(wǎng)絡編程的通信原理、實現(xiàn)步驟與相關操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2018-01-01python GUI庫圖形界面開發(fā)之PyQt5樹形結構控件QTreeWidget詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)PyQt5樹形結構控件QTreeWidget詳細使用方法與實例,需要的朋友可以參考下2020-03-03