Cara menggunakan AX.HIST pada Python

Histogram adalah grafik yang menunjukkan distribusi frekuensi.

Histogram adalah grafik yang menunjukkan jumlah pengamatan dalam setiap interval tertentu.

Contoh:

Misalkan kita megamati tinggi 250 orang, kita mungkin akan menghasilkan histogram seperti ini

Cara menggunakan AX.HIST pada Python

Kita bisa membaca dari histogram yang diatas, kira-kira seperti ini:

2 orang dari 140 hingga 145cm
5 orang dari 145 hingga 150cm
15 orang dari 151 hingga 156cm
31 orang dari 157 menjadi 162cm
46 orang dari 163 hingga 168cm
53 orang dari 168 hingga 173cm
45 orang dari 173 hingga 178cm
28 orang dari 179 hingga 184cm
21 orang dari 185 hingga 190cm
4 orang dari 190 hingga 195cm

Membuat Histogram

Pada Matplotlib, kita menggunakan fungsi hist() untuk membuat histogram.

Fungsi hist() akan menggunakan array angka untuk membuat histogram, array tersebut dikirim ke fungsi sebagai argumen.

Agar lebih sederhana, kita akan menggunakan NumPy untuk membuat array secara acak dengan 250 nilai, di mana nilai akan terkonsentrasi sekitar 170, dan deviasi standarnya adalah 10.

Contoh
Distribusi Data Normal menurut NumPy

import numpy as np

x = np.random.normal(170, 10, 250)

print(x)

Ini akan menghasilkan hasil acak.

Fungsi hist() akan membaca array dan menghasilkan histogram.

Contoh:
Histogram sederhana

import sys
import matplotlib
matplotlib.use('Agg')

import matplotlib.pyplot as plt
import numpy as np

x = np.random.normal(170, 10, 250)

plt.hist(x)
plt.show()

plt.savefig(sys.stdout.buffer)
sys.stdout.flush()

Hasil:

Cara menggunakan AX.HIST pada Python

Histogram adalah grafik yang menunjukkan distribusi frekuensi.

Histogram adalah grafik yang menunjukkan jumlah pengamatan dalam setiap interval tertentu.

Contoh:

Misalkan kita megamati tinggi 250 orang, kita mungkin akan menghasilkan histogram seperti ini

Kita bisa membaca dari histogram yang diatas, kira-kira seperti ini:

2 orang dari 140 hingga 145cm
5 orang dari 145 hingga 150cm
15 orang dari 151 hingga 156cm
31 orang dari 157 menjadi 162cm
46 orang dari 163 hingga 168cm
53 orang dari 168 hingga 173cm
45 orang dari 173 hingga 178cm
28 orang dari 179 hingga 184cm
21 orang dari 185 hingga 190cm
4 orang dari 190 hingga 195cm

Membuat Histogram

Pada Matplotlib, kita menggunakan fungsi hist() untuk membuat histogram.

Fungsi hist() akan menggunakan array angka untuk membuat histogram, array tersebut dikirim ke fungsi sebagai argumen.

Agar lebih sederhana, kita akan menggunakan NumPy untuk membuat array secara acak dengan 250 nilai, di mana nilai akan terkonsentrasi sekitar 170, dan deviasi standarnya adalah 10.

Contoh
Distribusi Data Normal menurut NumPy

import numpy as np

x = np.random.normal(170, 10, 250)

print(x)

Ini akan menghasilkan hasil acak.

Fungsi hist() akan membaca array dan menghasilkan histogram.

Contoh:
Histogram sederhana

import sys
import matplotlib
matplotlib.use('Agg')

import matplotlib.pyplot as plt
import numpy as np

x = np.random.normal(170, 10, 250)

plt.hist(x)
plt.show()

plt.savefig(sys.stdout.buffer)
sys.stdout.flush()

Hasil:

Saya membuat plot histogram menggunakan data dari file dan tidak ada masalah. Sekarang saya ingin menempatkan data dari file lain dalam histogram yang sama, jadi saya melakukan sesuatu seperti

n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)

tetapi masalahnya adalah bahwa untuk setiap interval, hanya bilah dengan nilai tertinggi yang muncul, dan yang lainnya disembunyikan. Saya bertanya-tanya bagaimana saya bisa memetakan kedua histogram secara bersamaan dengan warna yang berbeda.

Di sini Anda memiliki contoh yang berfungsi:

import random
import numpy
from matplotlib import pyplot

x = [random.gauss(3,1) for _ in range(400)]
y = [random.gauss(4,2) for _ in range(400)]

bins = numpy.linspace(-10, 10, 100)

pyplot.hist(x, bins, alpha=0.5, label='x')
pyplot.hist(y, bins, alpha=0.5, label='y')
pyplot.legend(loc='upper right')
pyplot.show()

Jawaban yang diterima memberikan kode untuk histogram dengan bilah yang tumpang tindih, tetapi jika Anda ingin setiap bilah saling berdampingan (seperti yang saya lakukan), coba variasi di bawah ini:

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-deep')

x = np.random.normal(1, 2, 5000)
y = np.random.normal(-1, 3, 2000)
bins = np.linspace(-10, 10, 30)

plt.hist([x, y], bins, label=['x', 'y'])
plt.legend(loc='upper right')
plt.show()

Referensi: http://matplotlib.org/examples/statistics/histogram_demo_multihist.html

EDIT [2018/03/16]: Diperbarui untuk memungkinkan plot array dengan ukuran berbeda, seperti yang disarankan oleh @stochastic_zeitgeist

Jika Anda memiliki ukuran sampel yang berbeda, mungkin sulit untuk membandingkan distribusi dengan sumbu y tunggal. Sebagai contoh:

import numpy as np
import matplotlib.pyplot as plt

#makes the data
y1 = np.random.normal(-2, 2, 1000)
y2 = np.random.normal(2, 2, 5000)
colors = ['b','g']

#plots the histogram
fig, ax1 = plt.subplots()
ax1.hist([y1,y2],color=colors)
ax1.set_xlim(-10,10)
ax1.set_ylabel("Count")
plt.tight_layout()
plt.show()

Dalam hal ini, Anda dapat memplot dua set data Anda pada sumbu yang berbeda. Untuk melakukannya, Anda bisa mendapatkan data histogram Anda menggunakan matplotlib, bersihkan porosnya, dan kemudian plot ulang pada dua sumbu terpisah (menggeser tepi nampan sehingga tidak tumpang tindih):

#sets up the axis and gets histogram data
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.hist([y1, y2], color=colors)
n, bins, patches = ax1.hist([y1,y2])
ax1.cla() #clear the axis

#plots the histogram data
width = (bins[1] - bins[0]) * 0.4
bins_shifted = bins + width
ax1.bar(bins[:-1], n[0], width, align='Edge', color=colors[0])
ax2.bar(bins_shifted[:-1], n[1], width, align='Edge', color=colors[1])

#finishes the plot
ax1.set_ylabel("Count", color=colors[0])
ax2.set_ylabel("Count", color=colors[1])
ax1.tick_params('y', colors=colors[0])
ax2.tick_params('y', colors=colors[1])
plt.tight_layout()
plt.show()

Berikut adalah metode sederhana untuk memplot dua histogram, dengan bilah mereka berdampingan, pada plot yang sama ketika data memiliki ukuran yang berbeda:

def plotHistogram(p, o):
    """
    p and o are iterables with the values you want to 
    plot the histogram of
    """
    plt.hist([p, o], color=['g','r'], alpha=0.8, bins=50)
    plt.show()

Sebagai penyelesaian untuk jawaban Gustavo Bezerra :

Jika Anda ingin setiap histogram dinormalisasi (normed untuk mpl <= 2.1 dan density untuk mpl> = 3.1 ) Anda tidak bisa hanya menggunakan normed/density=True, Anda perlu mengatur bobot untuk setiap nilai sebagai gantinya:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.normal(1, 2, 5000)
y = np.random.normal(-1, 3, 2000)
x_w = np.empty(x.shape)
x_w.fill(1/x.shape[0])
y_w = np.empty(y.shape)
y_w.fill(1/y.shape[0])
bins = np.linspace(-10, 10, 30)

plt.hist([x, y], bins, weights=[x_w, y_w], label=['x', 'y'])
plt.legend(loc='upper right')
plt.show()

Sebagai perbandingan, vektor x dan y yang sama persis dengan bobot default dan density=True:

Anda harus menggunakan bins dari nilai yang dikembalikan oleh hist:

import numpy as np
import matplotlib.pyplot as plt

foo = np.random.normal(loc=1, size=100) # a normal distribution
bar = np.random.normal(loc=-1, size=10000) # a normal distribution

_, bins, _ = plt.hist(foo, bins=50, range=[-6, 6], normed=True)
_ = plt.hist(bar, bins=bins, alpha=0.5, normed=True)

Untuk berjaga-jaga jika Anda memiliki pandas (import pandas as pd) atau tidak apa-apa dengan menggunakannya:

test = pd.DataFrame([[random.gauss(3,1) for _ in range(400)], 
                     [random.gauss(4,2) for _ in range(400)]])
plt.hist(test.values.T)
plt.show()

Pertanyaan ini telah dijawab sebelumnya, tetapi ingin menambahkan solusi cepat/mudah lain yang mungkin membantu pengunjung lain ke pertanyaan ini.

import seasborn as sns 
sns.kdeplot(mydata1)
sns.kdeplot(mydata2)

Beberapa contoh bermanfaat adalah di sini untuk perbandingan kde vs histogram.

Terinspirasi oleh jawaban Solomon, tetapi untuk tetap dengan pertanyaan, yang terkait dengan histogram, solusi bersih adalah:

sns.distplot(bar)
sns.distplot(foo)
plt.show()

Pastikan untuk memplot yang lebih tinggi terlebih dahulu, jika tidak Anda perlu mengatur plt.ylim (0,0.45) agar histogram yang lebih tinggi tidak dipotong.

Apa itu matplotlib pada Python?

Arti dari Matplotlib adalah Library berbasis Python untuk kepentingan visualisasti data yang dapat berjalan di multi-flatfrom(Windows, MacOs, Linux) dengan menggunakan Numpy. Dengan matplotlib kita dapat membuat plot, histogram, diagram batang dan jenis diagram lainnya hanya dengan beberapa baris kode.

%Matplotlib inline untuk apa?

“%matplotlib inline” digunakan untuk meng-embed gambar plot statis di dalam notebook.

Apa itu visualisasi data Python?

Visualisasi data adalah teknik mengambil informasi dari data ke dalam bentuk visual yang bisa dilihat oleh mata, seperti bagan, grafik, dan peta. Visualisasi data dibuat untuk memahami data yang besar atau kecil dengan mudah. R dan Python merupakan platform yang hampir bisa menganalisis semua jenis grafik.