Python隐藏刻度线但显示刻度线标签


Answers:



37

感谢您的回答@ julien-spronck和@cmidi。
注意,我必须同时使用两种方法来使其工作:

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(11, 3))

data = np.random.random((4, 4))

ax1.imshow(data)
ax1.set(title='Bad', ylabel='$A_y$')
# plt.setp(ax1.get_xticklabels(), visible=False)
# plt.setp(ax1.get_yticklabels(), visible=False)
ax1.tick_params(axis='both', which='both', length=0)

ax2.imshow(data)
ax2.set(title='Somewhat OK', ylabel='$B_y$')
plt.setp(ax2.get_xticklabels(), visible=False)
plt.setp(ax2.get_yticklabels(), visible=False)
# ax2.tick_params(axis='both', which='both', length=0)

ax3.imshow(data)
ax3.set(title='Nice', ylabel='$C_y$')
plt.setp(ax3.get_xticklabels(), visible=False)
plt.setp(ax3.get_yticklabels(), visible=False)
ax3.tick_params(axis='both', which='both', length=0)

plt.show()

带有所需标签的代码结果


11

这对我有用:

plt.tick_params(axis='both', labelsize=0, length = 0)

9

在参加有关Python的课程时,这是一个问题。

以下是给定的解决方案,我认为它更具可读性和直观性。

ax.tick_params(top='off', bottom='off', left='off', right='off', labelleft='on', labelbottom='on')

9
从v2.2开始不建议使用“ on”或“ off”,您现在应该使用True或False。
阿斯特丽德

4

matplotlib.pyplot.setp(*args, **kwargs)用于设置艺术家对象的属性。除了get_xticklabes()使它不可见之外,还可以使用它。

以下内容

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(2,1,1)
ax.set_xlabel("X-Label",fontsize=10,color='red')
plt.setp(ax.get_xticklabels(),visible=False)

以下是参考页面 http://matplotlib.org/api/pyplot_api.html


2

您可以设置yaxisxaxis set_ticks_position属性,使其分别分别显示在左侧和底部。

ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

此外,您还可以通过将set_visible特定书脊的属性设置为来隐藏刺False

axes[i].spines['right'].set_visible(False)
axes[i].spines['top'].set_visible(False)

1
一点点附加说明就不会受到伤害。
谢夫

1
尽管这段代码可以解决问题,但包括解释如何以及为什么解决该问题的说明,确实可以帮助提高您的帖子质量,并可能导致更多的投票。请记住,您将来会为读者回答问题,而不仅仅是现在问的人。请编辑您的答案以添加解释,并指出适用的限制和假设。
Makyen

1

这对我来说效果很好!试试看

import matplotlib.pyplot as plt
import numpy as np

plt.figure()

languages =['Python', 'SQL', 'Java', 'C++', 'JavaScript']
pos = np.arange(len(languages))
popularity = [56, 39, 34, 34, 29]

plt.bar(pos, popularity, align='center')
plt.xticks(pos, languages)
plt.ylabel('% Popularity')
plt.title('Top 5 Languages for Math & Data \nby % popularity on Stack Overflow', 
alpha=0.8)

# remove all the ticks (both axes), 
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', 
labelbottom='on')
plt.show()

0

当前遇到相同的问题,在版本3.3.3中解决如下:

My matplotlib ver: 3.3.3

ax.tick_params(tick1On=False) for left and bottom ticks
ax.tick_params(tick2On=False) for right and top ticks, which are off by default

请在代码示例中添加注释符号以使其可执行。
bjhend

-2

假设您要删除Y轴上的一些刻度线,而只显示与yticks值大于0的刻度线相对应的刻度线,则可以执行以下操作:

from import matplotlib.pyplot as plt

fig, ax = plt.subplots()

# yticks and yticks labels
yTicks = list(range(26))
yTicks = [yTick if yTick % 5 == 0 else 0 for yTick in yTicks]
yTickLabels = [str(yTick) if yTick % 5 == 0 else '' for yTick in yTicks]

然后,按如下所示设置轴对象的Y轴:

ax.yaxis.grid(True)
ax.set_yticks(yTicks)
ax.set_yticklabels(yTickLabels, fontsize=6)
fig.savefig('temp.png')
plt.close()

然后您将得到如下图:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.