如何仅显示标量格式的y轴值?

时间:2019-07-18 15:18:34

标签: python matplotlib

对于符号学matplotlib图,我想仅使用带有十进制表示法的y轴刻度值(例如:0.4、10等),而没有科学值(例如4e-1、1e2等)。

Matplotlib log scale tick label number formatting中显示的解决方案(如下所示)在轴刻度值不是十个有效值时也无法正常工作:

y axis tick labels have exponential description

如何更改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()

1 个答案:

答案 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()

enter image description here