Python Matplotlib:添加自定义记号标签并删除y轴上的自定义记号

Python Matplotlib:添加自定义记号标签并删除y轴上的自定义记号,python,matplotlib,Python,Matplotlib,我想删除一个勾号和它的标签,而是在一个不同(但接近)的位置添加一个新的勾号标签,而不添加勾号本身。我不知道该怎么做。给出了一个实例 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

我想删除一个勾号和它的标签,而是在一个不同(但接近)的位置添加一个新的勾号标签,而不添加勾号本身。我不知道该怎么做。给出了一个实例

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的tick,我将不胜感激

谢谢

编辑:

正如两个答案中提到的,我将代码更改为:

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
的tick,而
y_ticks[6]
指位于
y=4.0
的tick-它跳过位于
y=3.7
的tick。那么,我如何访问它并只删除勾号呢? 这两个建议只解释了如何删除勾号和标签,或者只删除标签(没有勾号),我希望删除勾号并保留标签


尝试
y\u刻度[-1]。设置可见(假)
而不是
y\u刻度[-1]。标签。设置可见(假)
。它使标签和记号标记都不可见

编辑:

您可以使用
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_记号[-1]。设置_可见(假)
而不是
y_记号[-1]。label.set_可见(假)
。它使标签和记号标记都不可见

编辑:

您可以使用
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_记号列表,但在绘制任何东西之前。因此,matplotlib在两个轴上都设置了六个记号的轴,从0.0到1.0,并提供记号列表

然后,打印时,将添加更多的记号,并使用新标签更新列表中的记号。你的yjiks[]中的最后一个项目现在位于y轴的中间。


解决方案:先绘图,然后
y_ticks=ax.yaxis.get_major_ticks()
发生的情况是:在创建轴之后,您会得到y_ticks的列表,但是在绘制任何东西之前。因此,matplotlib在两个轴上都设置了六个记号的轴,从0.0到1.0,并提供记号列表

然后,打印时,将添加更多的记号,并使用新标签更新列表中的记号。你的yjiks[]中的最后一个项目现在位于y轴的中间。


解决方案:先绘图,然后
y\u ticks=ax.yaxis.get\u major\u ticks()。在
y=3.7
处添加的y记号被添加到短轴而不是长轴。因此,我通过ax.tick_参数(axis='y',which='minor',length=0)访问它。
。但是,这将根据
勾号参数设置所有次要勾号

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

谢谢你的帮助

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

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

感谢您的帮助

似乎
y\u ticks[-1]。set\u visible(False)
将y=3.5处的tick设置为不可见,但
y\u ticks[-1]。label.set\u visible(False)
不会更改任何内容。@noamg
y\u ticks[-1]。label.set\u visible(False)
在代码中用于使标签接近3.5 tick不可见。如果您使用
y_ticks[-1]。设置_visible(False)
,它会使标签和tick都不可见,因此您不再需要它。您是正确的,但是我仍然无法使
y=3.7
处的tick消失。由于某些原因,它不在
y_ticks
中。这很好。谢谢似乎
y_ticks[-1]。set_visible(False)
将y=3.5处的刻度设置为不可见,但
y_ticks[-1]。label.set_visible(False)
不会更改任何内容。@noamg
y_ticks[-1]。label.set_visible(False)
在代码中用于使标签接近3.5处不可见。如果您使用
y_ticks[-1]。设置_visible(False)
,它会使标签和tick都不可见,因此您不再需要它。您是正确的,但是我仍然无法使
y=3.7
处的tick消失。由于某些原因,它不在
y_ticks
中。这很好。谢谢但是,我不确定我的y_勾号列表是否更新为
y=3.7
勾号。因此,我无法访问它来修改它。但是,我不确定我的y_勾号列表是否更新为
y=3.7
tick。因此,我无法访问它来修改它。