对于符号学matplotlib图,我想仅使用带有十进制表示法的y轴刻度值(例如:0.4、10等),而没有科学值(例如4e-1、1e2等)。
在Matplotlib log scale tick label number formatting中显示的解决方案(如下所示)在轴刻度值不是十个有效值时也无法正常工作:
如何更改y轴刻度标签描述为[0.01、0.02、0.03和0.04]的代码?
或者现在是否有可以自动执行此操作的matplotlib函数?
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [1, 2], 'b': [0.04, 0.007]})
import matplotlib
matplotlib.use('QT5Agg')
import matplotlib.pyplot as plt
from matplotlib import ticker
ax = plt.subplot(1, 1, 1)
ax.semilogy(df.set_index('a').b, 'o', markersize=2)
def myLogFormat(y, pos):
# Find the number of decimal places required
decimalplaces = int(np.maximum(-np.log10(y), 0)) # =0 for numbers >=1
# Insert that number into a format string
formatstring = '{{:.{:1d}f}}'.format(decimalplaces)
# Return the formatted tick label
return formatstring.format(y)
ax.yaxis.set_major_formatter(ticker.FuncFormatter(myLogFormat))
# ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda y, _: '{:g}'.format(y)))
plt.grid()
plt.show()
答案 0 :(得分:1)
您可以使用this answer
中所示的以下解决方案from matplotlib import ticker
ax = plt.subplot(1, 1, 1)
ax.semilogy(df.set_index('a').b, 'o', markersize=2)
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.3f'))
ax.yaxis.set_minor_formatter(ticker.FormatStrFormatter('%.3f'))
plt.grid()
plt.show()