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

时间:2016-05-08 10:59:33

标签: 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].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的刻度线,我会很感激。

由于

enter image description here

修改

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

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。那么如何才能访问它并仅删除勾号? 这两个建议只解释了如何删除刻度和标签或仅删除标签(没有勾号),我正在寻找删除刻度并保留标签。

enter image description here

3 个答案:

答案 0 :(得分:1)

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

修改

您可以使用ax.yaxis.get_minor_ticks()访问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

[ERROR] [05/08/2016 11:07:12.896] [tracking-akka.actor.default-ispatcher-6] [akka://tracking/user/IO-HTTP/listener-0/16] Cannot support TLS_RSA_WITH_AES_256_CBC_SHA with currently installed providers java.lang.IllegalArgumentException: Cannot support TLS_RSA_WITH_AES_256_CBC_SHA with currently installed providers at sun.security.ssl.CipherSuiteList.<init>(CipherSuiteList.java:92) at sun.security.ssl.SSLEngineImpl.setEnabledCipherSuites(SSLEngineImpl.java:2038) at com.web3.tracking.SslConfiguration$$anonfun$sslEngineProvider$1.apply(SslConfiguration.scala:67) at com.web3.tracking.SslConfiguration$$anonfun$sslEngineProvider$1.apply(SslConfiguration.scala:66) at scala.Option.map(Option.scala:146) at spray.io.SSLEngineProviderCompanion$$anonfun$apply$3.apply(SslTlsSupport.scala:424) at spray.io.SSLEngineProviderCompanion$$anonfun$apply$3.apply(SslTlsSupport.scala:424) documentation中描述了允许访问不同刻度部分的所有功能。

答案 1 :(得分:1)

发生的情况是:您在创建了一个轴之后获得了y_ticks 的列表,但在之前绘制了任何内容。因此,matplotlib在两个轴上设置一个带有六个刻度的轴,从0.0到1.0,并为您提供刻度列表。

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

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

答案 2 :(得分:1)

好的,找到了答案。 y=3.7处添加的y刻度被添加到短轴而不是长轴。因此我通过ax.tick_params(axis='y', which='minor', length=0)访问了它。但是,这将根据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()

感谢您的帮助