Matplotlib 坐标轴自定义比例调整

Matplotlib axis custom scale adjustment

我正在使用

等命令从 pandas 数据框绘图
fig1 = plt.hist(dataset_1[dataset_1>-1.0],bins=bins,alpha=0.75,label=label1,normed=True) 

并且这些图在一个 canvas 上包含多个直方图。由于每个直方图都归一化为自己的积分(因此直方图具有相同的面积,因为直方图的目的是说明数据集的形状而不是它们的相对大小),y 轴上的数字没有意义。现在,我使用

抑制 y 轴标记
axes.set_ylabel("(Normalised to unity)")

axes.get_yaxis().set_ticks([])

有没有办法调整 y 轴的比例,使“1”对应于任何直方图上的最高值?这将显示一个垂直刻度来引导眼睛,并用它来判断不同 bin 的相对值。本质上,我的意思是在不影响直方图缩放比例的情况下重新标准化最大显示 y 值(即将轴比例与其表示的内容分离)。

您有两个选择:

绘制直方图,调整y轴刻度。

您可以将 y 刻度设置到最大值的位置,然后用 1 标记它。

import numpy as np; np.random.seed(1)
import matplotlib.pyplot as plt

a = np.random.rayleigh(scale=3, size=2000)

hist, edges,_ = plt.hist(a, ec="k")
plt.yticks([0,hist.max()], [0,1])

plt.show()

标准化直方图,按比例绘制。

您可以按照您希望的方式对直方图进行归一化,方法是首先计算直方图,将其除以最大值,然后绘制直方图。

import numpy as np; np.random.seed(1)
import matplotlib.pyplot as plt

a = np.random.rayleigh(scale=3, size=2000)

hist, edges = np.histogram(a)
hist = hist/float(hist.max())

plt.bar(edges[1:], hist, width=np.diff(edges)[0], align="edge", ec="k")
plt.yticks([0,1])

plt.show()

两种情况下的输出是相同的: