如何将图形轴转换为标准形式

时间:2013-08-30 09:36:32

标签: python graph numpy matplotlib

我绘制了一个图表,其中y轴上的比例很大(10 ^ 6)但是此时轴显示整数。如何让轴以​​标准形式显示?

range_v=142
max_actual_diff=0
max_ID=0.0

for i in range(0,fev[ind_2008].shape[0]):

    id_temp=ID[ind_2008[i]]

    ind_2009_temp=np.where(ID[ind_2009] == id_temp)
    actual_diff=fev[ind_2008[i]]-fev[ind_2009[ind_2009_temp]]

    if actual_diff > max_actual_diff:
        max_actual_diff=actual_diff
        max_ID=id_temp
    diff=np.abs(fev[ind_2008][i]-fev_p1)
    pdf_t, bins_t=np.histogram(diff,bins=range_v-1,range=(0,range_v))
    if i == 0:
        pdf=pdf_t
        pdf[:]=0.0
    pdf=pdf+pdf_t

print max_actual_diff, max_ID
#plot result
x=[max_actual_diff]*3000001
y=np.arange(0,3.000001e6,1)
bincenters = 0.5*(bins_t[1:]+bins_t[:-1])
fig3=plt.figure()
plt.plot(bincenters,pdf)
plt.plot(x,y)
plt.xlim(0,142)
plt.ylim(0,3e6)
plt.xlabel('Diff in FEV Measurements')
plt.ylabel('Frequency')
plt.legend(['Diff in FEV Measurements','max diff between recorded fevpctECFSPR'],loc='best')
plt.title('FEVPCT')
#plt.show()
plt.savefig('FEV.jpg')

1 个答案:

答案 0 :(得分:2)

这可以通过手动设置yticks的格式字符串来完成:

x = plt.linspace(0, 10, 100)
y = 1e6 + plt.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)
ax.set_yticklabels(["{:.6e}".format(t) for t in ax.get_yticks()])
plt.subplots_adjust(left=0.2)
plt.show()

enter image description here

重要的部分是{:6e}".format(t)这表明我们需要指数形式(标准形式),其中6 S.F.还调用了子图调整,以便显示数字的整个长度。

编辑:看过你的评论我相信你可以通过设置默认参数来实现类似的效果:

plt.rcParams['axes.formatter.limits'] = [-5,5]

默认为[-7, 7]