Cara menggambar dua histogram bertumpuk berdampingan dengan Matplotlib / Seaborn
Saya menggambar beberapa histogram bertumpuk menggunakan kode di bawah ini. Saya menggunakan tepi tempat sampah yang sama untuk keduanya sehingga selaras dengan baik.
Bagaimana saya bisa menampilkan ini pada grafik yang sama? Yaitu batang hijau / merah dan biru / oranye per setiap tempat sampah - berdampingan.
Saya melihat banyak pertanyaan dan jawaban yang mirip dengan ini menyarankan menggunakan diagram batang dan menghitung lebar batang, tetapi ini sepertinya sesuatu yang harus didukung di luar kotak, setidaknya di matplotlib.
Selain itu, dapatkah saya menggambar histogram bertumpuk secara langsung dengan tumbuhan laut? Saya tidak dapat menemukan cara.
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)

Jawaban
Nah, saya pikir plt.baryang terbaik adalah taruhan Anda di sini. Untuk membuat histogram bertumpuk, Anda dapat menggunakan bottom
argumennya. Untuk menampilkan dua diagram batang berdampingan, Anda dapat menggeser x
nilainya beberapa width
, seperti dalam contoh matplotlib asli ini :
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()
Ini mengembalikan:
Berikut adalah contoh sederhana (histogram tidak ditumpuk) untuk 2 histogram yang ditampilkan bersama dengan setiap nampan memiliki tempat khusus untuk masing-masing secara berdampingan:
# 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')