2012-02-29 35 views
11

Tôi đã tạo 3 bộ dữ liệu được sắp xếp theo mảng. Tôi quan tâm đến âm mưu phân bố xác suất của ba bộ dữ liệu này dưới dạng biểu đồ chuẩn. Tất cả ba bản phân phối nên trông gần như giống hệt nhau nên có vẻ hợp lý để vẽ cả ba trên cùng một trục để dễ so sánh.Hiển thị 3 biểu đồ trên 1 trục theo cách dễ đọc - matplotlib

Theo biểu đồ matplotlib mặc định được vẽ thành các thanh làm cho hình ảnh tôi muốn trông rất lộn xộn. Do đó, câu hỏi của tôi là liệu có thể buộc pyplot.hist chỉ vẽ một hộp/hình tròn/tam giác ở trên cùng của thanh sẽ ở dạng mặc định để tôi có thể hiển thị rõ ràng cả ba bản phân phối trên cùng một biểu đồ hoặc liệu tôi có phải tính toán dữ liệu biểu đồ và sau đó vẽ nó một cách riêng biệt dưới dạng biểu đồ phân tán.

Xin cảm ơn trước.

+1

Vì dữ liệu có thể vượt qua nhiều lần, nên có tham số 'alpha' (minh bạch) cho bất kỳ phương pháp nào bạn sử dụng. – Hooked

Trả lời

19

Có hai cách để vẽ biểu đồ ba biểu đồ đồng thời, nhưng cả hai đều không phải là những gì bạn đã yêu cầu. Để làm những gì bạn yêu cầu, bạn phải tính toán biểu đồ, ví dụ: bằng cách sử dụng numpy.histogram, sau đó vẽ theo phương pháp plot. Chỉ sử dụng scatter nếu bạn muốn liên kết thông tin khác với các điểm của mình bằng cách đặt kích thước cho mỗi điểm.

Cách tiếp cận thay thế đầu tiên để sử dụng hist liên quan đến việc chuyển tất cả ba tập dữ liệu cùng một lúc sang phương thức hist. Phương pháp hist sau đó điều chỉnh độ rộng và vị trí của mỗi thanh sao cho tất cả ba bộ được trình bày rõ ràng.

Phương án thứ hai là sử dụng tùy chọn histtype='step', làm cho các ô rõ ràng cho mỗi bộ.

Dưới đây là một kịch bản chứng minh điều này:

import numpy as np 
import matplotlib.pyplot as plt 

np.random.seed(101) 
a = np.random.normal(size=1000) 
b = np.random.normal(size=1000) 
c = np.random.normal(size=1000) 

common_params = dict(bins=20, 
        range=(-5, 5), 
        normed=True) 

plt.subplots_adjust(hspace=.4) 
plt.subplot(311) 
plt.title('Default') 
plt.hist(a, **common_params) 
plt.hist(b, **common_params) 
plt.hist(c, **common_params) 
plt.subplot(312) 
plt.title('Skinny shift - 3 at a time') 
plt.hist((a, b, c), **common_params) 
plt.subplot(313) 
common_params['histtype'] = 'step' 
plt.title('With steps') 
plt.hist(a, **common_params) 
plt.hist(b, **common_params) 
plt.hist(c, **common_params) 

plt.savefig('3hist.png') 
plt.show() 

Và đây là âm mưu kết quả:

enter image description here

Hãy nhớ bạn có thể làm tất cả điều này với giao diện hướng đối tượng là tốt, ví dụ tạo các ô con riêng lẻ, v.v.

+0

Cảm ơn rất nhiều. Tôi đã kết thúc việc khám phá ra numpy.histogram như bạn đã gợi ý và nó đã hoàn thành công việc một cách hoàn hảo! Rất nhiều đánh giá cao sự giúp đỡ. – Zykx

Các vấn đề liên quan