Matplotlib / Seaborn ile yan yana iki yığılmış histogram nasıl çizilir
Aşağıdaki kodu kullanarak birkaç yığılmış histogram çiziyorum. Her ikisi için de aynı bölme kenarlarını kullanıyorum, böylece güzelce hizalılar.
Bunların aynı grafikte görüntülenmesini nasıl sağlayabilirim? Yani her bölme için yeşil / kırmızı ve mavi / turuncu bir çubuk - yan yana.
Buna benzer çok sayıda soru ve cevap gördüm, bu bir çubuk grafik kullanmayı ve çubukların genişliğini hesaplamayı öneriyor, ancak bu, en azından matplotlib'de kutudan çıkar çıkmaz desteklenmesi gereken bir şey gibi görünüyor.
Ayrıca, istiflenmiş histogramları doğrudan seaborn ile çizebilir miyim? Bir yolunu bulamadım.
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)

Yanıtlar
Sanırım plt.barburadaki en iyi bahsiniz. Yığılmış histogramlar oluşturmak için bottom
argümanını kullanabilirsiniz . İki çubuk grafiği yan yana görüntülemek için , bu orijinal matplotlib örneğinde olduğu gibi x
değerleri bir miktar kaydırabilirsiniz :width
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()
Bu şunu döndürür:
Aşağıda, her bölme için yan yana ayrı bir yere sahip olan 2 histogram için basit bir örnek (histogramlar yığılmamıştır) verilmiştir:
# 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')