簡體   English   中英

如何使用 Matplotlib/Seaborn 並排繪制兩個堆疊直方圖

[英]How to draw two stacked histograms side-by-side with Matplotlib/Seaborn

我正在使用下面的代碼繪制幾個堆疊的直方圖。 我對兩者都使用了相同的 bin 邊緣,因此它們可以很好地對齊。

我怎樣才能將這些顯示在同一張圖表上? 即每個箱子都有一個綠色/紅色和一個藍色/橙色條 - 並排。

我看到很多與此類似的問題和答案,建議使用條形圖並計算條形的寬度,但這似乎應該是開箱即用的,至少在 matplotlib 中是這樣。

另外,我可以直接用 seaborn 繪制堆疊直方圖嗎? 我找不到辦法。

plt.hist( [correct_a, incorrect_a], bins=edges, stacked=True, color=['green', 'red'], rwidth=0.95, alpha=0.5)

在此處輸入圖像描述

plt.hist( [correct_b, incorrect_b], bins=edges, stacked=True, color=['green', 'red'], rwidth=0.95, alpha=0.5)

在此處輸入圖像描述

好吧,我認為plt.bar是您最好的選擇。 要創建堆疊直方圖,您可以使用其bottom參數。 要並排顯示兩個條形圖,您可以將x值移動一些width ,就像在這個原始的 matplotlib 示例中一樣:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(16, 8))

correct_a = np.random.randint(0, 20, 20)
incorrect_a = np.random.randint(0, 20, 20)
correct_b = np.random.randint(0, 20, 20)
incorrect_b = np.random.randint(0, 20, 20)
edges = len(correct_a)
width=0.35

rects1 = ax.bar(np.arange(edges), incorrect_a, width, color="red", label="incorrect_a")
rects2 = ax.bar(np.arange(edges), correct_a, width, bottom=incorrect_a, color='seagreen', label="correct_a")
rects3 = ax.bar(np.arange(edges) + width, incorrect_b, width, color="blue", label="incorrect_b")
rects4 = ax.bar(np.arange(edges) + width, correct_b, width, bottom=incorrect_b, color='orange', label="correct_b")

# placing the ticks to the middle
ticks_aligned = np.arange(edges) + width // 2
ax.set_xticks(np.arange(edges) + width / 2)
ax.set_xticklabels((str(tick) for tick in ticks_aligned))
ax.legend()

這將返回:

1個

這是一個簡單的示例(直方圖未堆疊),其中顯示了 2 個直方圖,每個 bin 都有一個並排的專用位置:

# generating some data for this example:
a = [1,2,3,4,3,4,2,3,4,5,4,3,4,5,4,1,2,3,2,1,3,4,5,6,7,6,5,4,3,4,6,5,4,3,4]
b = [1,2,3,4,5,6,7,6,5,6,7,6,5,4,3,4,5,6,7,6,7,6,7,5,4,3,2,1,3,4,5,6,5,6,5,6,7,6,7]

# plotting 2 histograms with bars centered differently within each bin:
plt.hist(a, bins=5, align='left', rwidth=0.5)
plt.hist(b, bins=5, align='mid', rwidth=0.5, color='r')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM