<p>如果样本大小不同,可能很难用单个y轴比较分布。例如:</p>
<pre><code>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()
</code></pre>
<p><a href="https://i.stack.imgur.com/6iOYj.png" rel="noreferrer"><img src="https://i.stack.imgur.com/6iOYj.png" alt="hist_single_ax"/></a></p>
<p>在这种情况下,可以在不同的轴上绘制两个数据集。为此,可以使用matplotlib获取直方图数据,清除轴,然后在两个单独的轴上重新绘制(移动箱子边缘,使其不重叠):</p>
<pre><code>#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()
</code></pre>
<p><a href="https://i.stack.imgur.com/iayQ1.png" rel="noreferrer"><img src="https://i.stack.imgur.com/iayQ1.png" alt="hist_twin_ax"/></a></p>