Hướng dẫn dùng matplotlib hist python

Histogram là sự phân bố dữ liệu số. Nó ước lượng phân phối xác suất của một biến liên tục và là một dạng biểu đồ thanh.

Để tạo biểu đồ, hãy làm theo các bước sau:

  • Bin phạm vi giá trị.
  • Chia toàn bộ phạm vi giá trị thành một loạt các khoảng.
  • Đếm xem có bao nhiêu giá trị rơi vào mỗi khoảng.

Các bins thường được chỉ định là các khoảng liên tiếp, không chồng chéo của một biến.

Hàm matplotlib.pyplot.hist () vẽ một biểu đồ, tính toán và vẽ biểu đồ của x.

Tham số :

Bảng sau liệt kê các tham số cho histogram:

xmảng hoặc chuỗi các mảng
bins số nguyên hoặc chuỗi hoặc 'auto', tùy chọn

Thông số tùy chọn

rangePhạm vi dưới và trên của bin
density Nếu true, phần tử đầu tiên của bộ giá trị trả về sẽ là số đếm được chuẩn hóa để tạo thành mật độ xác suất
cumulative Nếu true, thì biểu đồ được tính toán trong đó mỗi thùng cung cấp số lượng trong thùng đó cộng với tất cả các thùng cho các giá trị nhỏ hơn
histtype Loại histogram để vẽ. Mặc định là 'bar'

Ví dụ sau vẽ biểu đồ về điểm của các sinh viên trong một lớp học. Bốn thùng, 0-25, 26-50, 51-75 và 76-100 được xác định. Biểu đồ cho thấy số học sinh rơi vào phạm vi này.

from matplotlib import pyplot as plt
import numpy as np
fig,ax = plt.subplots(1,1)
a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
ax.hist(a, bins = [0,25,50,75,100])
ax.set_title("histogram of result")
ax.set_xticks([0,25,50,75,100])
ax.set_xlabel('marks')
ax.set_ylabel('no. of students')
plt.show()

Cốt truyện xuất hiện như hình dưới đây -

Thật khó tưởng tượng rằng bạn mở một tờ báo hoặc tạp chí mà không thấy một số biểu đồ cho bạn biết về số người hút thuốc trong các nhóm tuổi nhất định, số ca sinh trong một năm và vv. Đó là một cách tuyệt vời để miêu tả các sự kiện mà không cần phải sử dụng quá nhiều từ, nhưng về mặt hạn chế, chúng cũng có thể được sử dụng để thao túng hoặc nói dối qua thống kê.

Histogram là gì? Một định nghĩa chính thức có thể là: Đây là một đại diện đồ họa của một phân bố tần suất của một số dữ liệu số. Hình chữ nhật có kích thước bằng nhau theo hướng ngang có chiều cao tương ứng với tần suất.

Nếu chúng ta xây dựng một histogram, chúng ta sẽ bắt đầu phân bố phạm vi của các giá trị x có thể vào các khoảng hoặc thùng chứa thường có kích thước bằng nhau và liền kề.

Bây giờ chúng ta bắt đầu với một chương trình Python thực tiễn. Chúng tôi tạo một histogram với các số ngẫu nhiên:

>>> import matplotlib.pyplot as plt

>>> import numpy as np

>>> gaussian_numbers = np.random.normal(size=1000)

>>> plt.hist(gaussian_numbers)

(array([  10.,   29.,  118.,  231.,  265.,  221.,  100.,   22.,    3.,    1.]), array([-3.09815172, -2.40020948, -1.70226724, -1.00432499, -0.30638275,

        0.39155949,  1.08950174,  1.78744398,  2.48538622,  3.18332846,

        3.88127071]), )

>>> plt.title("Gaussian Histogram")



>>> plt.xlabel("Value")



>>> plt.ylabel("Frequency")



>>> plt.show()

>>> n, bins, patches = plt.hist(gaussian_numbers)

>>> print("n: ", n, sum(n))

('n: ', array([  10.,   29.,  118.,  231.,  265.,  221.,  100.,   22.,    3.,    1.]), 1000.0)

>>> print("bins: ", bins)

('bins: ', array([-3.09815172, -2.40020948, -1.70226724, -1.00432499, -0.30638275,

        0.39155949,  1.08950174,  1.78744398,  2.48538622,  3.18332846,

        3.88127071]))

>>> print("patches: ", patches)

('patches: ', )

>>> print(patches[1])

Rectangle(-2.40021,0;0.697942x29)

>>>

Chúng ta có thể tùy chỉnh số bin.


>>> plt.hist(gaussian_numbers, bins=100)

>>> plt.show()

Một tham số quan trọng khác của hist là "normed". "normed" là tùy chọn và giá trị mặc định là 'False'. Nếu nó được đặt thành 'True', phần tử đầu tiên của bộ dữ liệu trả về sẽ được đếm bình thường để tạo thành mật độ xác suất.


>>> plt.hist(gaussian_numbers, bins=100, normed=True)
>>> plt.show()

>>>

Nếu cả hai tham số ‘normed’ và 'stacked' được đặt thành 'True', tổng của biểu đồ được normalized thành 1.

>>> plt.hist(gaussian_numbers,

...          bins=100,

...          normed=True,

...          stacked=True,

...          edgecolor="#6A9662",

...          color="#DDFFDD")

>>> plt.show()

Nếu bạn muốn xem nó như mô tả một hình vẽ với giá trị lũy tiến? Chúng ta có thể vẽ nó như một hàm phân phối lũy tiến bằng cách thiết lập tham số 'cumulative'.

>>> plt.hist(gaussian_numbers,

...          bins=100,

...          normed=True,

...          stacked=True,

...          cumulative=True)

>>> plt.show()

Thực hành với bar plot qua phương thức bar().

>>> bars = plt.bar([1,2,3,4], [1,4,9,16])

>>> bars[0].set_color('green')

>>> plt.show()

>>>

Và cách thiết lập màu riêng cho các bar để tạo điểm nhấn qua hàm set_color(). Để có đượng bar tương ứng ta dùng hàm get_children() của lớp Axis
>>> ax=f.add_subplot(1,1,1)

>>> ax.bar([1,2,3,4], [1,4,9,16])



>>> children = ax.get_children()

>>> children[2].set_color('g')

>>> plt.show()

Two-Dimensional Histograms and Binnings

Giống như ta tạo histogram trong một chiều bằng cách chia dữ liệu vào thùng, chúng ta cũng có thể tạo histogram theo hai chiều bằng cách chia điểm giữa các thùng chứa hai chiều. Chúng ta sẽ xem xét một số cách để làm điều này ở đây. Chúng ta sẽ bắt đầu bằng cách xác định một số dữ liệu-mảng x và y được rút ra từ một phân bố Gaussian đa biến:

>>> import numpy as np

>>> import matplotlib.pyplot as plt

>>> mean = [0, 0]

>>> cov = [[1, 1], [1, 2]]

>>> x, y = np.random.multivariate_normal(mean, cov, 10000).T

Một cách đơn giản để vẽ histogram hai chiều là sử dụng Matplotlib.

>>> plt.hist2d(x, y, bins=30, cmap='Blues')

>>> cb = plt.colorbar()

>>> cb.set_label('counts in bin')

>>> plt.show()

Biểu đồ histogram hai chiều tạo ra một tesselation của hình vuông qua các trục. Một hình dạng tự nhiên khác cho việc tesselation là hình lục giác thông thường. Với mục đích này, Matplotlib cung cấp phương thức plt.hexbin, nó sẽ đại diện cho một bộ dữ liệu hai chiều được chèn trong một ô lưới lục giác:


plt.hexbin(x, y, gridsize=30, cmap='Blues')



>>> cb = plt.colorbar(label='count in bin')

>>> plt.show()

Kết Luận

Kết thúc bài học này, bạn đọc đã thu được cách thức vẽ biểu đồ tần số (Histogram) đối với dữ liệu 1-D & 2-D. Bài học cũng cố gắng đưa đến người đọc nhiều lựa chọn biểu diễn kèm theo các cách thay đổi tương tứng nhất.