【问题标题】:Axis numerical offset in matplotlibmatplotlib中的轴数值偏移
【发布时间】:2016-08-31 15:36:55
【问题描述】:

我正在用 matplotlib 绘制一些东西,它看起来像这样:

我似乎无法弄清楚为什么 x 轴会像现在这样偏移......它看起来像是在说,'无论你从我这里读到什么,将 2.398e9 添加到它以获得实际的 x 值'。

这不是我想要的...我可以让它只取前 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')

【问题讨论】:

  • 为什么不使用log 频率值?
  • +2.398e9 来自哪里?我想您需要修改您正在绘制的数据集,以便 x 值不会变得这么大,在正确的位置除以 1e6 或类似位置。
  • 如果答案有效,请点赞!

标签: python matplotlib plot axes graphing


【解决方案1】:

您需要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)

【讨论】:

  • 我喜欢它......它仍然在小数点前留下大量尾随零,但它确实删除了科学记数法。我查阅了一些关于字符串的 'sprintf' 函数格式的文档,但一直无法保留,比如前 5 位数字。不过还是谢谢你的回答!
【解决方案2】:

如果您不想玩格式化游戏,而只想直接以 MHz 显示值,那么您可以简单地将数据重新调整为 MHz 而不是 Hz。类似的东西

data['x'] /= 1000

然后将“MHz”添加到您的轴标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2017-07-31
    • 2014-08-01
    • 1970-01-01
    • 2011-04-10
    • 2012-08-05
    相关资源
    最近更新 更多