2016-07-29 159 views
2

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:

30 means 3ns

回答

0

我想解决的方式是非常简单的:绘制之前只是乘以你阵列值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() 
+0

这是行不通的。假设我有50ns的轨迹,所以我的np数组将有500个点,其值在0到180之间。如果用0.1乘以数值,x轴将缩放而不是y轴。直方图的x轴将是0-18,如果按照您说的那样,而不是0-180。 – Simon

+0

你说得对,我错了。对于那个很抱歉。我编辑了我的答案,并在我的一个阴谋中进行了测试,现在应该开始工作。如果没有,请让我知道:)。 – Andreq

0

最简单的方法是定义你的坐标轴,然后乘以坐标轴的刻度。例如,

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()