我正在使用python + matplotlib,并且我有两个图共享一个轴。如果尝试graph1.set_xticklabels([])
在共享轴时进行设置,则由于共享该轴而无效。有没有一种方法可以共享轴并可以隐藏一个绘图的x轴?
Answers:
使用共享轴时,这是常见的陷阱。
幸运的是,有一个简单的解决方法:用于plt.setp(ax.get_xticklabels(), visible=False)
使标签仅在一个轴上不可见。
这相当于[label.set_visible(False) for label in ax.get_xticklabels()]
,不管它的价值。 setp
将自动对可迭代的matplotlib对象以及单个对象进行操作。
举个例子:
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(range(10), 'b-')
ax2 = fig.add_subplot(2,1,2, sharex=ax1)
ax2.plot(range(10), 'r-')
plt.setp(ax1.get_xticklabels(), visible=False)
plt.show()
根据matplotlib-users上的一个线程,您可以使用
import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
try:
ax.label_outer()
except:
pass
try
需要?没有它似乎很好。
try
之所以需要它,是因为并非plt.gcf().axes
保证列表中的所有元素都是subplot
实例(使用label_outer
方法)。
您可以使用Axes.tick_params():
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212, sharex=ax1)
ax1.tick_params(labelbottom=False)
您可以在创建子图的过程中使用plt.subplots
as共享轴
fig, axes = plt.subplots(nrows=2, sharex=True)
这将自动关闭内轴的刻度标签。
完整的例子:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, sharex=True)
axes[0].plot([1,2,3])
axes[1].plot([3,2,1])
plt.show()
label_outer()
似乎可以工作stackoverflow.com/a/12751192/125507
plt.setp(ax2.get_yticklabels(), visible=True)
。完美地工作。