Matplotlib直方图通过常数因子缩放y轴
问题描述:
Im在直方图中绘制了一些值,并且想要缩放y轴,但我只找到标准化y轴值或按对数缩放它们的方法。 我的数值是100ps的时间步长,我想将每个y轴的数值乘以0.1,以获得更好,更容易理解的ns步长。Matplotlib直方图通过常数因子缩放y轴
如何缩放直方图中的y轴值?
n, bins, patches = plt.hist(values1, 50, facecolor='blue', alpha=0.9, label="Sample1",align='left')
n, bins, patches = plt.hist(values2, 50, facecolor='red', alpha=0.9, label="Sample2",align='left')
plt.xlabel('value')
plt.ylabel('time [100ps]')
plt.title('')
plt.axis([-200, 200, 0, 180])
plt.legend()
plt.show()
在y轴上该图10表示为1ns:
答
我想解决的方式是非常简单的:绘制之前只是乘以你阵列值1和values2 0.1。
matplotlib中存在日志缩放的原因是日志转换非常常见。对于简单的乘法缩放,只需乘以您正在绘制的数组即可。
编辑:你是对的,我错了,困惑(没有注意到你正在处理直方图)。然后我会做的是使用matplotlib.ticker
模块来调整y轴上的刻度。见下:
# Your code.
n, bins, patches = plt.hist(values1, 50, facecolor='blue', alpha=0.9, label="Sample1",align='left')
n, bins, patches = plt.hist(values2, 50, facecolor='red', alpha=0.9, label="Sample2",align='left')
plt.xlabel('value')
plt.ylabel('time [100ps]')
plt.title('')
plt.axis([-200, 200, 0, 180])
plt.legend()
# My addition.
import matplotlib.ticker as mtick
def div_10(x, *args):
"""
The function that will you be applied to your y-axis ticks.
"""
x = float(x)/10
return "{:.1f}".format(x)
# Apply to the major ticks of the y-axis the function that you defined.
ax = plt.gca()
ax.yaxis.set_major_formatter(mtick.FuncFormatter(div_10))
plt.show()
答
最简单的方法是定义你的坐标轴,然后乘以坐标轴的刻度。例如,
fig, ax1 = plt.subplots()
ax1.hist(values1, 50, facecolor='blue', alpha=0.9, label="Sample1",align='left')
y_vals = ax1.get_yticks()
ax1.set_yticklabels(['{:3.0f}%'.format(x * 100) for x in y_vals])
plt.show()
这是行不通的。假设我有50ns的轨迹,所以我的np数组将有500个点,其值在0到180之间。如果用0.1乘以数值,x轴将缩放而不是y轴。直方图的x轴将是0-18,如果按照您说的那样,而不是0-180。 – Simon
你说得对,我错了。对于那个很抱歉。我编辑了我的答案,并在我的一个阴谋中进行了测试,现在应该开始工作。如果没有,请让我知道:)。 – Andreq