【问题标题】:Puzzling behavior for matplotlib.pyplot yticks([])matplotlib.pyplot yticks([]) 的令人费解的行为
【发布时间】:2020-03-30 00:33:48
【问题描述】:

我想抑制 pyplot 自动生成的刻度标签,以支持我自己的标签。当我在以下 Python 脚本中使用 pyplot.yticks([]) 抑制 y-tick 标签时,

from matplotlib import pyplot as plt

num_points = 10
data       = [i for i in range(num_points)]
fig        = plt.figure()
ax         = plt.subplot(1,1,1)

ax.plot(data)
ax.set_yscale('log')
plt.yticks([])
plt.text(1, 7, '10 data points')

plt.show()

pyplot 根据需要抑制 y-tick 标签:

但是当num_points小于十时,pyplot会忽略pyplot.yticks([]),插入其自动生成的刻度标签,并产生

当我通过plt.yticks(values_list, labels_list) 提供值列表和标签列表来提供自己的刻度标签时,pyplot.yticks() 接受我的标签,但它仍然绘制其自动生成的刻度标签,覆盖我的标签。

如果我通过省略ax.set_yscale('log') 语句将九点对数图更改为线性图,pyplot 不会自动绘制生成刻度标签:

问题似乎与少于十个点的对数图有关。如何在少于十个点的对数图中抑制自动生成的刻度标签?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    使用对数轴时,默认情况下不仅会显示主要刻度,还会显示次要刻度。您可以单独关闭它们。请注意,当主要刻度很少时,次要刻度也可以得到一个标签。

    另请注意,在对数刻度上使用零值通常不是一个好主意。由于log(0) 是负无穷大,matplotlib 必须对所需的刻度距离进行一些脆弱的猜测。

    from matplotlib import pyplot as plt
    from matplotlib import ticker
    
    num_points = 10
    data       = [i+2 for i in range(num_points)]
    fig        = plt.figure()
    ax         = plt.subplot(1,1,1)
    
    ax.plot(data)
    ax.set_yscale('log')
    ax.text(1, 7, '10 data points')
    ax.yaxis.set_major_locator(ticker.NullLocator())
    ax.yaxis.set_minor_locator(ticker.NullLocator())
    
    plt.show()
    

    图像以蓝色显示主要刻度,以红色显示次要刻度。在本例中,只有一个主要刻度,一些次要刻度也有一个标签。

    【讨论】:

    • 这能回答你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2018-07-02
    • 2020-06-19
    • 2023-03-12
    • 1970-01-01
    • 2011-03-27
    • 2010-11-15
    相关资源
    最近更新 更多