我目前正在用科学记数法生成不同的y轴图,从而在某些地块上产生类似2或6的刻度,而在另一些图上却产生2.5或8.9的刻度.我希望在y轴上始终带有一个带有十进制小数点的刻度,即使它添加了零也是如此.这是一个例子
import matplotlib.pyplot as plt
import numpy as np
plt.plot(np.arange(1, 10), np.arange(1, 10)**5)
ax = plt.gca()
plt.ticklabel_format(axis='y', style='sci')
ax.yaxis.major.formatter.set_powerlimits((0,0))
plt.show()
我可以添加哪些内容以强制在y轴上绘制刻度线1.0、2.0等?
解决方法:
ScalarFormatter当前不支持刻度的自定义格式,例如设置小数位数.但是,您可以扩展该类,以便强制其使用您指定的格式.这是一个例子:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import ScalarFormatter
class ScalarFormatterForceFormat(ScalarFormatter):
def _set_format(self): # Override function that finds format to use.
self.format = "%1.1f" # Give format here
plt.plot(np.arange(1, 10), np.arange(1, 10)**5)
ax = plt.gca()
yfmt = ScalarFormatterForceFormat()
yfmt.set_powerlimits((0,0))
gca().yaxis.set_major_formatter(yfmt)
plt.show()
这是它的外观.
标签:python,matplotlib
来源: https://codeday.me/bug/20191011/1894509.html