Trong trường hợp bạn có kích cỡ mẫu khác nhau, nó có thể khó khăn để so sánh các bản phân phối với một trục y duy nhất. Ví dụ:
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()
Trong trường hợp này, bạn có thể vẽ hai bộ dữ liệu của bạn trên các trục khác nhau. Để làm như vậy, bạn có thể nhận được dữ liệu biểu đồ của bạn sử dụng matplotlib, xóa các trục, và sau đó lại cốt truyện nó trên hai trục riêng biệt (thay đổi các cạnh bin để họ không chồng chéo):
#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()
Nó sẽ không phải là một ý tưởng tốt để thiết lập 'pyplot.hold (True)' trước khi âm mưu, chỉ trong trường hợp? – JAB
Không chắc chắn nếu giữ (True) được đặt trong thông số cấu hình matplotlib của tôi hoặc pyplot hoạt động như thế này theo mặc định, nhưng đối với tôi mã hoạt động như nó được. Mã được trích xuất từ một ứng dụng lớn hơn mà không đưa ra bất kỳ vấn đề nào cho đến nay.Dù sao, câu hỏi hay mà tôi đã tự viết cho mình khi viết mã số – joaquin
@joaquin: làm thế nào tôi có thể chỉ định x là màu xanh dương và y là màu đỏ? – amc