import matplotlib.pyplot as plt
import numpy as np
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
hist, bins = np.histogram(x, bins=50)
width = 0.7 * (bins[1] - bins[0])
center = (bins[:-1] + bins[1:]) / 2
plt.bar(center, hist, align='center', width=width)
plt.show()
Antarmuka berorientasi objek juga mudah:
fig, ax = plt.subplots()
ax.bar(center, hist, align='center', width=width)
fig.savefig("1.png")
Jika Anda menggunakan tempat sampah kustom (non-konstan), Anda dapat meneruskan menghitung lebar menggunakan np.diff
, meneruskan lebar ke ax.bar
dan menggunakan ax.set_xticks
untuk memberi label tepi tempat sampah:
import matplotlib.pyplot as plt
import numpy as np
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
bins = [0, 40, 60, 75, 90, 110, 125, 140, 160, 200]
hist, bins = np.histogram(x, bins=bins)
width = np.diff(bins)
center = (bins[:-1] + bins[1:]) / 2
fig, ax = plt.subplots(figsize=(8,3))
ax.bar(center, hist, align='center', width=width)
ax.set_xticks(bins)
fig.savefig("/tmp/out.png")
plt.show()
plt.bar
'swidth
parameter dapat menerima array-seperti objek (bukan skalar). Jadi, Anda bisa menggunakanwidth = np.diff(bins)
bukanwidth = 0.7 * (bins[1] - bins[0])
.width
pengaturan itu sendiri hanya mengatur lebar bilah, bukan? Saya berbicara tentang label sumbu x (yaitu saya ingin melihat tepi bin yang sebenarnya menjadi label pada sumbu x). Ini harus serupa dengan caraplt.hist
kerjanya.ax.set_xticks
untuk mengatur xlabel. Saya telah menambahkan contoh di atas untuk menunjukkan apa yang saya maksud.Jika Anda tidak menginginkan bilah, Anda dapat memplotnya seperti ini:
sumber
ax.step
.Saya tahu ini tidak menjawab pertanyaan Anda, tetapi saya selalu berakhir di halaman ini, ketika saya mencari solusi matplotlib untuk histogram, karena sederhana
histogram_demo
telah dihapus dari halaman galeri contoh matplotlib.Inilah solusinya, yang tidak perlu
numpy
diimpor. Saya hanya mengimpor numpy untuk menghasilkan data yangx
akan diplot. Ini bergantung pada fungsihist
daripada fungsibar
seperti pada jawaban oleh @unutbu.Lihat juga galeri matplotlib dan contoh matplotlib .
sumber
Jika Anda ingin menggunakan
pandas
:sumber
pandas
Anda mungkin harus menyertakan tautan ke situs mereka dan lebih banyak contoh yang menjelaskan apa yang sedang terjadi.Saya pikir ini mungkin berguna untuk seseorang.
Fungsi histogram Numpy, yang membuat saya kesal (meskipun, saya menghargai ada alasan bagus untuk itu), mengembalikan tepi setiap tempat sampah, daripada nilai tempat sampah. Meskipun, ini masuk akal untuk bilangan floating-point, yang dapat berada dalam interval (yaitu nilai pusat tidak terlalu berarti), ini bukan keluaran yang diinginkan saat berhadapan dengan nilai diskrit atau bilangan bulat (0, 1, 2, dll) . Secara khusus, panjang nampan yang dikembalikan dari np. Histogram tidak sama dengan panjang hitungan / kepadatan.
Untuk menyiasati ini, saya menggunakan np.digitize untuk menghitung input, dan mengembalikan sejumlah tempat sampah, bersama dengan pecahan jumlah untuk setiap bin. Anda dapat dengan mudah mengedit untuk mendapatkan jumlah bilangan bulat dari hitungan.
Referensi:
[1] https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html
[2] https://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html
sumber