Matplotlib轴自定义比例调整

时间:2018-01-25 15:08:11

标签: python matplotlib plot label axes

我正在使用像

这样的命令来绘制pandas数据框
fig1 = plt.hist(dataset_1[dataset_1>-1.0],bins=bins,alpha=0.75,label=label1,normed=True) 

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

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

axes.get_yaxis().set_ticks([])

有没有办法调整y轴的缩放比例,以便" 1"对应于任何直方图的最高值?这将显示垂直刻度以引导眼睛并用其来判断不同箱的相对值。本质上,我的意思是重新规范化显示的最大y值,而不影响直方图的缩放(即将轴刻度与它所代表的尺度分离)。

1 个答案:

答案 0 :(得分:0)

您有两种选择:

绘制直方图,调整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()

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

enter image description here