matplotlib 中的轴数值偏移

Axis numerical offset in matplotlib

我正在用 matplotlib 绘图,看起来像这样:

我似乎无法弄清楚为什么 x-axis 会像现在这样偏移...它看起来像是在说,'whatever you read from me, add 2.398e9 to it for the actual x value'。

这不是我想要的...我可以只取前 4 位数字吗?

这代表频率,所以我想看到这样的内容:

2000 或 2400 或 2800....我可以在轴标题中添加 'MHz' 部分...但是,一眼看去是不可读的。

这样做是因为它试图决定如何截断长数据吗?

这是绘图代码:

plt.title(file_name +' at frequency '+ freq + 'MHz')
plt.xlabel('Frequency')
plt.ylabel('Conducted Power (dBm)')
plt.grid(True)
plt.plot(data['x'],data['y'])
#plt.axis([min(data['x']),max(data['x']),min(data['y'],max(data['y']))])
plt.savefig(file_name+'_'+freq)
print('plot written!')
#plt.show()
plt.close('all')

您需要 import 来自 matplotlib.ticker 的某些格式化程序。这是 full documentation to ticker

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))

同样将此设置到您的绘图后,您应该能够看到 +2.398e9 消失。

一般来说,为了避免使用科学记数法,请使用以下内容:

ax.get_xaxis().get_major_formatter().set_scientific(False)

如果您不想玩格式化游戏而只想直接以 MHz 为单位显示值,那么您可以简单地将数据重新缩放为以 MHz 而不是 Hz 为单位。像

data['x'] /= 1000

然后将 'MHz' 添加到轴标签。