在matplotlib图的轴上显示小数位和科学计数法 [英] Show decimal places and scientific notation on the axis of a matplotlib plot
问题描述
我正在使用python 2.7在pyqt程序中使用matplotlib绘制一些大数字.我的y轴范围通常为1e + 18到3e + 18.我希望看到每个刻度线都以科学计数法显示数值,并保留小数点后两位.例如2.35e + 18而不是2e + 18,因为在2e + 18到3e + 18之间的值仍会读取2e + 18几个刻度.这是该问题的一个示例.
I am plotting some big numbers with matplotlib in a pyqt program using python 2.7. I have a y-axis that ranges from 1e+18 to 3e+18 (usually). I'd like to see each tick mark show values in scientific notation and with 2 decimal places. For example 2.35e+18 instead of just 2e+18 because values between 2e+18 and 3e+18 still read just 2e+18 for a few tickmarks. Here is an example of that problem.
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(0, 300, 20)
y = np.linspace(0,300, 20)
y = y*1e16
ax.plot(x,y)
ax.get_xaxis().set_major_formatter(plt.LogFormatter(10, labelOnlyBase=False))
ax.get_yaxis().set_major_formatter(plt.LogFormatter(10, labelOnlyBase=False))
plt.show()
推荐答案
如果您使用matplotlib.ticker.FormatStrFormatter
而不是LogFormatter
,这确实很容易做到.以下代码将以'%.2e'
格式标记所有内容:
This is really easy to do if you use the matplotlib.ticker.FormatStrFormatter
as opposed to the LogFormatter
. The following code will label everything with the format '%.2e'
:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(0, 300, 20)
y = np.linspace(0,300, 20)
y = y*1e16
ax.plot(x,y)
ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
plt.show()
这篇关于在matplotlib图的轴上显示小数位和科学计数法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!