日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Matplotlib條形圖之分組條形圖和堆疊條形圖詳解_python

作者:你這個階段睡得著的 ? 更新時間: 2022-05-09 編程語言

分組條形圖

拓展一下問題復雜度:使用水平條形圖展示每位員工前三個月的銷售額。此時,我們需要將每位員工的銷售額按月分組,分別繪制條形圖進行展示。

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()函數構造橫坐標
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()

請添加圖片描述

分組條形圖比簡單條形圖的復雜之處在于,在放數據?x?軸坐標和刻度位置時,需要進行額外的計算和調整。在執行坐標的計算時,推薦使用 numpy ,因為它支持廣播機制,向量化的算術運算更加簡單。例如,上例中在設置第二個和第三個條形的?x?軸坐標時,我們使用了?np.arange(4) + bar_width?和?np.arange(4) + bar_width * 2,而利用 Python 列表實現將十分復雜。

堆疊條形圖

堆疊條形圖是分組條形圖展示的另一種形式,它把分類的數據堆疊在一起,顯得更簡約緊密,同時提供了求和信息。在實現上,繪制的思路與條形圖相似,不過前者是垂直偏移,后者是水平偏移。

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?選項的使用讓數據在該基礎之上有一個偏移;二是 NumPy 模塊?array()函數的使用,將列表類型的數據轉換為?ndarray?,以便元素級別(向量化)運算。

總結

原文鏈接:https://blog.csdn.net/XQC_KKK/article/details/123329119

欄目分類
最近更新