Cara menggambar dua histogram bertumpuk berdampingan dengan Matplotlib / Seaborn

Aug 19 2020

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

1 PéterLeéh Aug 19 2020 at 16:25

Nah, saya pikir plt.baryang terbaik adalah taruhan Anda di sini. Untuk membuat histogram bertumpuk, Anda dapat menggunakan bottomargumennya. Untuk menampilkan dua diagram batang berdampingan, Anda dapat menggeser xnilainya 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:

BossaNova Aug 19 2020 at 16:05

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')