国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
第七章 使用 matplotlib 繪制堆疊條形圖

系列文章目錄

第一章 使用 matplotlib 繪制折線圖
第二章 使用 matplotlib 繪制條形圖
第三章 使用 matplotlib 繪制直方圖
第四章 使用 matplotlib 繪制散點(diǎn)圖
第五章 使用 matplotlib 繪制餅圖
第六章 使用 matplotlib 繪制熱力圖
第七章 使用 matplotlib 繪制堆疊條形圖
第八章 使用 matplotlib 在一個(gè)畫布內(nèi)繪制多個(gè)圖


文章目錄

  • 系列文章目錄
  • 前言
  • 一、什么是堆疊條形圖?
  • 二、堆疊條形圖的繪制
  • 三、應(yīng)用場(chǎng)景
    • 1.適用場(chǎng)景
    • 2.不適用場(chǎng)景
  • 總結(jié)

前言

上一章我們講述了熱力圖的繪制,本章我們來講述堆疊條形圖的繪制。


一、什么是堆疊條形圖?

堆疊條形圖是一種用來分解整體、比較各部分的圖。與條形圖類似,堆疊條形圖常被用于比較不同類別的數(shù)值。而且,它的每一類數(shù)值內(nèi)部,又被劃分為多個(gè)子類別,這些子類別一般用不同的顏色來表示。

如果說條形圖可以幫助我們觀察總量,那么堆疊條形圖則可以同時(shí)反映總量與結(jié)構(gòu),即總量是多少?它又是由哪些部分構(gòu)成的?進(jìn)而,我們還可以探究哪一部分比例最大,以及每一部分的變動(dòng)情況等等。

二、堆疊條形圖的繪制

堆疊條形圖的繪制和條形圖類似,同樣是調(diào)用 bar 函數(shù),只不過在參數(shù)設(shè)置時(shí)稍有區(qū)別,示例代碼如下:

# importing package
import matplotlib.pyplot as plt
import numpy as np

plt.style.use('fivethirtyeight')
  
x = ['A', 'B', 'C', 'D']
y1 = np.array([10, 20, 10, 30])
y2 = np.array([20, 25, 15, 25])
y3 = np.array([12, 15, 19, 6])
y4 = np.array([10, 29, 13, 19])
  
plt.bar(x, y1, label='Round1', width=0.67)
plt.bar(x, y2, bottom=y1, label='Round2', width=0.67)
plt.bar(x, y3, bottom=y1+y2, label='Round3', width=0.67)
plt.bar(x, y4, bottom=y1+y2+y3, label='Round4', width=0.67)

plt.xlabel("Teams")
plt.ylabel("Score")
plt.legend()
plt.title("Scores by Teams in 4 Rounds")

plt.tight_layout()
plt.show()

在上面的代碼中,列表 x 代表 4 只隊(duì)伍,列表 y1、y2、y3 和 y4 分別表示 4 只隊(duì)伍在 4 局比賽的得分。在進(jìn)行圖形繪制時(shí),在繪制 y2 數(shù)據(jù)時(shí),設(shè)置 bottom = y1,意思是在 y1 數(shù)據(jù)繪制的條形圖的基礎(chǔ)進(jìn)行繪制,也就是形成堆疊圖。代碼執(zhí)行完得到的圖形如下圖所示:


在上圖中,y1 列表對(duì)應(yīng)的條形圖在最底部,y2 列表對(duì)應(yīng)的條形圖位于 y1 列表對(duì)應(yīng)條形圖的上面,后面以此類推。上面的堆疊條形圖是垂直方向的,和前面的條形圖一樣,我們同樣的可以繪制水平方向的堆疊條形圖。例如:

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('fivethirtyeight')
  
x = ['A', 'B', 'C', 'D']
y1 = np.array([10, 20, 10, 30])
y2 = np.array([20, 25, 15, 25])
y3 = np.array([12, 15, 19, 6])
y4 = np.array([10, 29, 13, 19])
  
plt.barh(x, y1, label='Round1', height=0.67)
plt.barh(x, y2, left=y1, label='Round2', height=0.67)
plt.barh(x, y3, left=y1+y2, label='Round3', height=0.67)
plt.barh(x, y4, left=y1+y2+y3, label='Round4', height=0.67)

plt.xlabel("Score")
plt.ylabel("Teams")
plt.legend()
plt.title("Scores by Teams in 4 Rounds")

plt.tight_layout()
plt.show()

在繪制水平方向的堆疊條形圖時(shí),需要將參數(shù) bottom 改為 left,將參數(shù) width 改為 height,需要將 x 軸標(biāo)簽改為 Score,y 軸標(biāo)簽改為 Teams。其他的和垂直方向的堆疊條形圖的繪制類似。代碼執(zhí)行后得到的圖形如下圖所示:


如上圖所示,堆疊條形圖的方向有垂直變成了水平,但是圖例遮擋了部分條形圖,下面我們將圖例的位置移到右下角。例如:

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('fivethirtyeight')
  
x = ['A', 'B', 'C', 'D']
y1 = np.array([10, 20, 10, 30])
y2 = np.array([20, 25, 15, 25])
y3 = np.array([12, 15, 19, 6])
y4 = np.array([10, 29, 13, 19])
  
plt.barh(x, y1, label='Round1', height=0.67)
plt.barh(x, y2, left=y1, label='Round2', height=0.67)
plt.barh(x, y3, left=y1+y2, label='Round3', height=0.67)
plt.barh(x, y4, left=y1+y2+y3, label='Round4', height=0.67)

plt.xlabel("Score")
plt.ylabel("Teams")
plt.legend(loc='lower right')
plt.title("Scores by Teams in 4 Rounds")

plt.tight_layout()
plt.show()

在上面的代碼中,我們通過設(shè)置 legend 函數(shù)的 loc 參數(shù)來改變圖例的位置。


如上圖所示,我們將圖例的位置由右上角改為了右下角。

三、應(yīng)用場(chǎng)景

1.適用場(chǎng)景

對(duì)比不同類別數(shù)據(jù)的數(shù)值大小,同時(shí)對(duì)比每一類別數(shù)據(jù)中,子類別的構(gòu)成及大小。

2.不適用場(chǎng)景

  1. 對(duì)于堆疊柱狀圖來說,很多色塊不處于同一水平線上,因此難以比較。所以,如果需要清楚的比較數(shù)值,建議采用分組柱狀圖,讓每一根柱子的高度都顯而易見。
  2. 當(dāng)堆疊的類型過多,很容易讓人眼花繚亂。

總結(jié)

本章我們講了堆疊條形圖的繪制以及堆疊條形圖的適用場(chǎng)景和不適用場(chǎng)景。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MATPLOTLIB 教程:如何使用 Matplotlib 庫在 python 中執(zhí)行繪圖和數(shù)據(jù)可視化
Matplotlib數(shù)據(jù)可視化:柱狀圖與直方圖
matplotlib 必知的 15 個(gè)圖
python 讀取并顯示圖片的兩種方法
pandas可視化(2)【官方文檔解讀】-- 條形圖、直方圖
python數(shù)據(jù)可視化 | DataFrame.plot()函數(shù)繪制數(shù)據(jù)圖
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服