我想删除一个刻度及其标签,而是在不同的(但很接近的)位置添加一个新的刻度标签,而不是勾号本身。我不知道该怎么做。给出了一个例子。
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
。那么如何才能访问它并仅删除勾号?
这两个建议只解释了如何删除刻度和标签或仅删除标签(没有勾号),我正在寻找删除刻度并保留标签。
答案 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()
感谢您的帮助