繁体   English   中英

Matplotlib:添加自定义刻度标签并删除y轴上的自定义刻度

[英]Matplotlib: add custom tick label and remove custom tick on y-axis

我想删除一个刻度线及其标签,而是在没有刻度线本身的其他(但关闭)位置添加一个新的刻度线标签。 我不确定该怎么做。 举一个例子。

import matplotlib.pyplot as plt
def main():
    fig = plt.figure()
    x = [1,2,3,4,5]
    y = x
    ax = fig.add_subplot(1,1,1)
    y_ticks = ax.yaxis.get_major_ticks()
    y_ticks[-1].label.set_visible(False)
    ax.set_yticks([3.7], minor=True)
    ax.set_yticklabels(["100"], minor=True)
    ax.plot(x,y)
    plt.show()
if __name__ == '__main__':
    main()

我剩下的是删除位于y = 3.5,3.7的刻度线。

另外,如您所见,我访问了y_ticks [-1]以将其标签设置为不可见。 这是任意选择的,如果有人可以解释为什么y_ticks [-1]选择位于y = 3.5的刻度,我将不胜感激。

谢谢

在此处输入图片说明

编辑:

如两个答案中所述,我将代码更改为:

import matplotlib.pyplot as plt

def main():
    fig = plt.figure()
    x = [1,2,3,4,5]
    y = x
    ax = fig.add_subplot(1,1,1)
    ax.plot(x,y)
    ax.set_yticks([3.7], minor=True)
    ax.set_yticklabels(["100"], minor=True)
    y_ticks = ax.yaxis.get_major_ticks()
    y_ticks[5].set_visible(False)
    y_ticks[6].label.set_visible(False)
    plt.show()
if __name__ == '__main__':
    main()

这产生了下面的图,您可以看到y_ticks[5]指向位于y=3.5的刻度线, y_ticks[6]指向位于y=4.0的刻度线-它跳过了y=3.7的刻度线。 那么我如何才能访问它并仅删除刻度线? 这两个建议仅说明了如何同时删除刻度线和标签或仅删除标签(不带刻度线),我正在寻找删除刻度线并保留标签的方法。

在此处输入图片说明

尝试使用y_ticks[-1].set_visible(False)代替y_ticks[-1].label.set_visible(False) 它使标签和刻度标记都不可见。

编辑:

您可以使用ax.yaxis.get_minor_ticks()3,7处访问小刻度线,如以下代码所示:

import matplotlib.pyplot as plt

fig = plt.figure()
x = [1,2,3,4,5]
y = x
ax = fig.add_subplot(1,1,1)
ax.set_yticks([3.7], minor=True)
ax.set_yticklabels(["100"], minor=True)
ax.plot(x,y)

y_ticks = ax.yaxis.get_major_ticks()
y_ticks[5].set_visible(False)
y_minor_ticks = ax.yaxis.get_minor_ticks()
y_minor_ticks[0].label.set_visible(False)

plt.show()

如果您只希望100附近的刻度消失,并且想要保留标签,请使用:

ax.yaxis.get_minorticklines()[0].set_visible(False)

代替 :

y_minor_ticks = ax.yaxis.get_minor_ticks()
y_minor_ticks[0].label.set_visible(False)

matplotlib.axis 文档中介绍了所有允许访问不同刻度部分的功能。

什么情况是:你得到y_ticks的列表中,您已经创建了一个轴 ,但你之前绘制任何东西。 因此,matplotlib设置了一个在两个轴上都带有六个刻度的轴(从0.0到1.0),并提供了刻度列表。

然后,在绘制时,将添加更多的刻度,并使用新标签更新列表中的刻度。 y_ticks []中的最后一项现在位于Y轴的中间。

解决方案:首先绘制, 然后 y_ticks = ax.yaxis.get_major_ticks()

好,找到答案了。 y=3.7处添加的y刻度添加到短轴而不是长轴。 因此我通过ax.tick_params(axis='y', which='minor', length=0)访问它。 但是,这将根据tick_params设置所有次要滴答tick_params

import matplotlib.pyplot as plt

def main():
    fig = plt.figure()
    x = [1,2,3,4,5]
    y = x
    ax = fig.add_subplot(1,1,1)
    ax.plot(x,y)
    ax.set_yticks([3.7], minor=True)
    ax.set_yticklabels(["100"], minor=True)
    y_ticks_major = ax.yaxis.get_major_ticks()
    y_ticks_major[5].set_visible(False)
    ax.tick_params(axis='y', which='minor', length=0)
    plt.show()
if __name__ == '__main__':
    main()

谢谢您的帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM