考虑这个小示例中的y刻度:
import matplotlib.pyplot as plt
plt.plot([200,400,600,800])
plt.ticklabel_format(axis='y',style='sci',scilimits=(0,0))
plt.show()
结果图:
我希望y刻度标签具有带有一个小数的固定格式,即1.0
而不是1
,等等。我如何做到这一点,同时将科学记数的指数保持在图的顶部?
到目前为止,我找到的所有解决方案(大多数使用FormatStrFormatter
而不是ScalarFormatter
)使指数在所有刻度标签上重复,如1.0e2
、2.0e2
等,这不是我想要的。
提前谢谢你。
发布于 2018-03-18 18:25:56
我刚刚找到了一个解决方案。它是这样的:
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter
class ScalarFormatterForceFormat(ScalarFormatter):
def _set_format(self,vmin,vmax): # Override function that finds format to use.
self.format = "%1.1f" # Give format here
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot([200,400,600,800])
yfmt = ScalarFormatterForceFormat()
yfmt.set_powerlimits((0,0))
ax.yaxis.set_major_formatter(yfmt)
plt.show()
它基于不同线程上的this answer。
https://stackoverflow.com/questions/49351275
复制