網(wǎng)站首頁 編程語言 正文
Python matplotlib繪制雙柱狀圖以及繪制堆積柱狀圖
- 雙柱狀圖
- 一、雙柱狀圖的原理
- 二、雙柱狀圖的完善
- 1. 增加圖片標題
- 2. 增加x軸y軸標題
- 3. 增加x軸注釋
- 四、完整代碼
- 堆積柱狀圖
- 一、堆積柱狀圖的繪制原理
- 二、plt.bar參數(shù)介紹
- 三、完整代碼:
雙柱狀圖
一、雙柱狀圖的原理
繪制雙柱狀圖的原理用最樸素的話來講就是:
先繪制第一個系列的柱體(如先繪制男生柱體),然后在第一個系列柱狀體的右邊繪制第二個系列的柱體(如女生柱體)。
這時就需要解決一個問題:應該如何確定第二個系列的柱狀體所應在的位置信息呢?要想解決這個問題,就需要了解繪制柱狀圖plt.bar()中的兩個參數(shù):x和width。
x:用于控制主體應該繪制在哪
width:柱狀體的寬度
有了這兩個參數(shù),便可以知道柱體右側(cè)的位置信息了:x+width
寫一份簡單的代碼示意一下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
boyNum=[2, 3, 4]
girlNum=[4, 5, 6]
width=0.4
plt.bar([i for i in range(len(boyNum))], boyNum, width=width, label='男生')
plt.bar([i+width for i in range(len(boyNum))], girlNum, width=width, label='女生')
plt.legend()
plt.show()
結(jié)果:
這里主要關注這兩行代碼:
plt.bar([i for i in range(len(boyNum))], boyNum, width=width, label='男生')
plt.bar([i+width for i in range(len(boyNum))], girlNum, width=width, label='女生')
第一行代碼是繪制男生系列柱狀體,它的位置是:[0, 1, 2],寬度width為0.4
第二行代碼是繪制女生系列柱狀體,它的位置是:[0+0.4, 1+0.4, 2+0.4],寬度仍為0.4
二、雙柱狀圖的完善
1. 增加圖片標題
plt.title('各班級人數(shù)')
結(jié)果:
2. 增加x軸y軸標題
plt.bar([i for i in range(len(boyNum))], boyNum, width=width, label='男生')
plt.bar([i+width for i in range(len(boyNum))], girlNum, width=width, label='女生')
結(jié)果:
3. 增加x軸注釋
我們希望在每兩個柱狀圖中間寫上類似:班級一,班級二等,就像這樣:
那么如何保證注釋在兩個柱狀體之間呢?仔細觀察可以發(fā)現(xiàn),注釋所在的位置=第一個系列柱體所在的位置+1/2*width
因此,可以使用如下代碼解決:
plt.xticks([x+width/2 for x in range(3)], ['班級1', '班級2', '班級3'])
最終的效果圖:
四、完整代碼
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = [u"SimHei"]
plt.rcParams["axes.unicode_minus"] = False
totalWidth=0.8 # 一組柱狀體的寬度
labelNums=2 # 一組有兩種類別(例如:男生、女生)
barWidth=totalWidth/labelNums # 單個柱體的寬度
seriesNums=3 # 一共有3組(例如:3個班級)
plt.bar([x for x in range(seriesNums)], height=[4,5,6], label="男生", width=barWidth)
plt.bar([x+barWidth for x in range(seriesNums)], height=[2,3,4], label="女生", width=barWidth)
plt.xticks([x+barWidth/2*(labelNums-1) for x in range(seriesNums)], ["班級1","班級2","班級3"])
plt.xlabel("班級")
plt.ylabel("人數(shù)")
plt.title("班級人數(shù)占比")
plt.legend()
plt.show()
堆積柱狀圖
一、堆積柱狀圖的繪制原理
如何使用matplotlib繪制簡單的柱狀圖,例如:
import matplotlib.pyplot as plt
plt.bar([1,2,3],[4,5,6])
plt.show()
結(jié)果:
但是當數(shù)據(jù)分組分類別的時候例如我們想繪制一下每個班級的男女生人數(shù)的時候,我們往往想出來類似這樣的效果:
那么這種圖是怎么做的呢?其實它還是基于plt.bar(),但是更改了部分參數(shù)。
二、plt.bar參數(shù)介紹
讓我們直接看一下matplotlib官方文檔【1】是怎么介紹plt.bar()的參數(shù)的:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, , align='center', data=None, *kwargs)
這里詳細介紹bottom參數(shù)(堆積柱狀圖就是基于此參數(shù)):
bottom: float or array-like, default: 0
The y coordinate(s) of the bars bases
翻譯成中文是什么意思呢?就是說,我們的每一個“柱子”的高度是從y軸的哪一個值開始往上長。還不明白?沒關系,還是以班級男女為例:
一開始我們畫了一個bar為各班級男性人數(shù):[4,5,6],現(xiàn)在我們再畫一個女生bar,但是這次女生bar不再是從0開始,而是分別從[4,5,6]開始,即:
bar1=plt.bar([1,2,3],[4,5,6], label='男生')
bar2=plt.bar([1,2,3],[1,2,3],color='g',bottom=[4,5,6], label='女生')
三、完整代碼:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
bar1=plt.bar([1,2,3],[4,5,6], label='男生')
bar2=plt.bar([1,2,3],[1,2,3],color='g',bottom=[4,5,6], label='女生')
plt.xticks([1,2,3], ['班級1', '班級2', '班級3'])
plt.xlabel('班級')
plt.ylabel('人數(shù)')
plt.title('各班級男女人數(shù)對比')
plt.legend()
plt.show()
原文鏈接:https://blog.csdn.net/weixin_39589455/article/details/127938201
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2021-12-09 Quartz在.NET中的使用教程_實用技巧
- 2023-02-14 C#實現(xiàn)ComboBox變色的示例代碼_C#教程
- 2023-03-17 Python控制windows系統(tǒng)音量實現(xiàn)實例_python
- 2022-10-16 Python?讀取?Word?文檔操作_python
- 2022-04-30 DataGridView實現(xiàn)點擊列頭升序和降序排序_C#教程
- 2022-12-14 Jetpack?Compose?雙指拖拽實現(xiàn)詳解_Android
- 2022-12-25 Kotlin伴隨對象的初始化方法示例講解_Android
- 2021-12-15 liunx安裝Jenkins超詳細全過程_Linux
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支