小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

第七章 使用 matplotlib 繪制堆疊條形圖...

 行走在理想邊緣 2023-01-13 發(fā)布于四川

系列文章目錄

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



前言

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


一、什么是堆疊條形圖?

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

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

二、堆疊條形圖的繪制

堆疊條形圖的繪制和條形圖類似,同樣是調(diào)用 bar 函數(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 只隊伍,列表 y1、y2、y3 和 y4 分別表示 4 只隊伍在 4 局比賽的得分。在進(jìn)行圖形繪制時,在繪制 y2 數(shù)據(jù)時,設(shè)置 bottom = y1,意思是在 y1 數(shù)據(jù)繪制的條形圖的基礎(chǔ)進(jìn)行繪制,也就是形成堆疊圖。代碼執(zhí)行完得到的圖形如下圖所示:
在這里插入圖片描述
在上圖中,y1 列表對應(yīng)的條形圖在最底部,y2 列表對應(yīng)的條形圖位于 y1 列表對應(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ù) 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)用場景

1.適用場景

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

2.不適用場景

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

總結(jié)

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多