Hướng dẫn python create bins for histogram - python tạo thùng cho biểu đồ

Một biểu đồ đơn giản có thể là bước đầu tiên tuyệt vời trong việc tìm hiểu một bộ dữ liệu. Trước đó, chúng tôi đã thấy một bản xem trước của hàm biểu đồ của Matplotlib (xem so sánh, mặt nạ và logic boolean), tạo ra một biểu đồ cơ bản trong một dòng, một khi nhập khẩu nồi hơi bình thường được thực hiện:

In [1]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')

data = np.random.randn(1000)

Hàm hist() có nhiều tùy chọn để điều chỉnh cả tính toán và màn hình; Dưới đây là một ví dụ về biểu đồ tùy chỉnh hơn:

In [3]:

plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');

DocString

plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
0 có nhiều thông tin hơn về các tùy chọn tùy chỉnh khác có sẵn. Tôi thấy sự kết hợp này của
plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
1 cùng với một số minh bạch
plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
2 rất hữu ích khi so sánh biểu đồ của một số phân phối:

In [4]:

x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);

Nếu bạn chỉ muốn tính toán biểu đồ (nghĩa là đếm số lượng điểm trong một thùng nhất định) và không hiển thị nó, hàm

plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
3 có sẵn:

In [5]:

counts, bin_edges = np.histogram(data, bins=5)
print(counts)

Biểu đồ hai chiều và Binnings¶

Giống như chúng ta tạo biểu đồ theo một chiều bằng cách chia dòng số thành các thùng, chúng ta cũng có thể tạo biểu đồ thành hai chiều bằng cách chia các điểm giữa các thùng hai chiều. Chúng tôi sẽ xem xét ngắn gọn một số cách để làm điều này ở đây. Chúng tôi sẽ bắt đầu bằng cách xác định một số dữ liệu.

In [6]:

mean = [0, 0]
cov = [[1, 1], [1, 2]]
x, y = np.random.multivariate_normal(mean, cov, 10000).T

plt.hist(data, bins=30, normed=True, alpha=0.5, histtype='stepfilled', color='steelblue', edgecolor='none'); 6: Biểu đồ hai chiều

Một cách đơn giản để vẽ biểu đồ hai chiều là sử dụng hàm

plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
6 của Matplotlib:

In [12]:

plt.hist2d(x, y, bins=30, cmap='Blues')
cb = plt.colorbar()
cb.set_label('counts in bin')

Giống như với

plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
0,
plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
6 có một số tùy chọn bổ sung để tinh chỉnh cốt truyện và Binning, được phác thảo một cách độc đáo trong chức năng DocString. Hơn nữa, giống như
plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
0 có một đối tác trong
x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
1,
plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
6 có một đối tác trong
x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
3, có thể được sử dụng như sau:

In [8]:

counts, xedges, yedges = np.histogram2d(x, y, bins=30)

Để khái quát hóa của biểu đồ này theo kích thước cao hơn hai, hãy xem hàm

x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
4.

x1 = np.random.normal(0, 0.8, 1000) x2 = np.random.normal(-2, 1, 1000) x3 = np.random.normal(3, 2, 1000) kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40) plt.hist(x1, **kwargs) plt.hist(x2, **kwargs) plt.hist(x3, **kwargs); 5: Binnings lục giác

Biểu đồ hai chiều tạo ra một hình vuông của các hình vuông trên các trục. Một hình dạng tự nhiên khác cho một tesselation như vậy là hình lục giác thông thường. Với mục đích này, Matplotlib cung cấp thói quen

x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
5, sẽ đại diện cho một bộ dữ liệu hai chiều bị hỏng trong một lưới các hình lục giác:

In [9]:

plt.hexbin(x, y, gridsize=30, cmap='Blues')
cb = plt.colorbar(label='count in bin')

x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
5 có một số tùy chọn thú vị, bao gồm khả năng chỉ định trọng số cho từng điểm và thay đổi đầu ra trong mỗi thùng thành bất kỳ cốt liệu nhảm nhí nào (trung bình của trọng số, độ lệch chuẩn của trọng số, v.v.).

Ước tính mật độ hạt nhân

Một phương pháp phổ biến khác để đánh giá mật độ trong nhiều chiều là ước tính mật độ hạt nhân (KDE). Điều này sẽ được thảo luận đầy đủ hơn về chiều sâu: ước tính mật độ hạt nhân, nhưng bây giờ chúng ta sẽ chỉ đề cập rằng KDE có thể được coi là một cách để "bôi nhọ" các điểm trong không gian và thêm kết quả để đạt được hàm số. Một triển khai KDE cực kỳ nhanh chóng và đơn giản tồn tại trong gói

x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
8. Dưới đây là một ví dụ nhanh về việc sử dụng KDE trên dữ liệu này:

In [10]:

from scipy.stats import gaussian_kde

# fit an array of size [Ndim, Nsamples]
data = np.vstack([x, y])
kde = gaussian_kde(data)

# evaluate on a regular grid
xgrid = np.linspace(-3.5, 3.5, 40)
ygrid = np.linspace(-6, 6, 40)
Xgrid, Ygrid = np.meshgrid(xgrid, ygrid)
Z = kde.evaluate(np.vstack([Xgrid.ravel(), Ygrid.ravel()]))

# Plot the result as an image
plt.imshow(Z.reshape(Xgrid.shape),
           origin='lower', aspect='auto',
           extent=[-3.5, 3.5, -6, 6],
           cmap='Blues')
cb = plt.colorbar()
cb.set_label("density")

KDE có độ dài làm mịn, trượt một cách hiệu quả núm giữa chi tiết và độ mịn (một ví dụ về sự đánh đổi không biến đổi thiên vị phổ biến). Các tài liệu về việc chọn một độ dài làm mịn thích hợp là rất lớn:

x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
9 sử dụng một quy tắc để cố gắng tìm độ dài làm mịn gần như tối ưu cho dữ liệu đầu vào.

Các triển khai KDE khác có sẵn trong hệ sinh thái SCIPY, mỗi người có điểm mạnh và điểm yếu riêng; Xem, ví dụ,

counts, bin_edges = np.histogram(data, bins=5)
print(counts)
0 và
counts, bin_edges = np.histogram(data, bins=5)
print(counts)
1. Đối với trực quan hóa dựa trên KDE, sử dụng matplotlib có xu hướng quá dài dòng. Thư viện Seaborn, được thảo luận trong trực quan hóa với Seaborn, cung cấp API ngắn gọn hơn nhiều để tạo ra các trực quan hóa dựa trên KDE.

Làm thế nào để bạn thêm thùng vào biểu đồ trong Python?

Bạn có thể sử dụng một trong các phương pháp sau để điều chỉnh kích thước thùng của biểu đồ trong matplotlib:..
Phương pháp 1: Chỉ định số lượng thùng PLT. Lịch sử (dữ liệu, thùng = 6).
Phương pháp 2: Chỉ định ranh giới thùng PLT. Lịch sử (dữ liệu, thùng = [0, 4, 8, 12, 16, 20]).
Phương pháp 3: Chỉ định chiều rộng bin w = 2 plt. Lịch sử (dữ liệu, thùng = np. Arange (min (dữ liệu), tối đa (dữ liệu) + w, w)).

Làm thế nào để bạn làm thùng cho một biểu đồ?

Có một vài quy tắc chung để chọn thùng:..
BIN nên có cùng kích thước.....
Các thùng nên bao gồm tất cả các dữ liệu, thậm chí các ngoại lệ.....
Ranh giới cho các thùng phải hạ cánh ở số lượng toàn bộ bất cứ khi nào có thể (điều này làm cho biểu đồ dễ đọc hơn) ..
Chọn từ 5 đến 20 thùng ..

BIN trong biểu đồ Python là gì?

Nó là một loại biểu đồ thanh.Để xây dựng một biểu đồ, bước đầu tiên là về Bin bin, phạm vi của các giá trị - nghĩa là chia toàn bộ phạm vi giá trị thành một loạt các khoảng - và sau đó đếm số lượng giá trị rơi vào mỗi khoảng.Các thùng 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.divide the entire range of values into a series of intervals — and then count how many values fall into each interval. The bins are usually specified as consecutive, non-overlapping intervals of a variable.