autofmt_xdate删除所有子图的x轴标签

16
我使用 autofmt_xdate 来以易读的方式绘制长x轴标签。问题是当我想要组合不同的子图时,其他子图的x轴标签消失了,我不希望在下面的图中最左边的(两行高)子图上出现这种情况。有没有办法防止 autofmt_xdate 抑制其他x轴标签?或者有另一种旋转标签的方法吗?如您所见,我也尝试使用了 xticks 和 "rotate",但结果并不令人满意,因为标签围绕它们的中心旋转,导致标签混乱无序。

生成此图的脚本:

from matplotlib import pyplot as plt
from numpy import arange
import numpy
from matplotlib import rc

rc("figure",figsize=(15,10))
#rc('figure.subplot',bottom=0.1,hspace=0.1)
rc("legend",fontsize=16)
fig = plt.figure()


Test_Data = numpy.random.normal(size=20)

fig = plt.figure()
Dimension = (2,3)
plt.subplot2grid(Dimension, (0,0),rowspan=2)
plt.plot(Test_Data)
plt.subplot2grid(Dimension, (0,1),colspan=2)
for i,j in zip(Test_Data,arange(len(Test_Data))):
    plt.bar(i,j)
plt.legend(arange(len(Test_Data)))
plt.subplot2grid(Dimension, (1,1),colspan=2)
xticks = [r"%s (%i)" % (a,b) for a,b in zip(Test_Data,Test_Data)]
plt.xticks(arange(len(Test_Data)),xticks)
fig.autofmt_xdate()
plt.ylabel(r'$Some Latex Formula/Divided by some Latex Formula$',fontsize=14)
plt.plot(Test_Data)
#plt.setp(plt.xticks()[1],rotation=30)
plt.tight_layout()
#plt.show()

通过脚本创建的图形

1个回答

17

实际上,这是一个autofmt_xdate方法的特性。根据autofmt_xdate方法的文档:

日期刻度标签经常会重叠,因此将它们旋转并右对齐非常有用。此外,常见的使用情况是带有共享x轴的多个子图,其中x轴是日期数据。刻度标签通常很长,因此在底部子图上旋转它们,并在其他子图上将其关闭,同时关闭x轴标签。

如果你想只旋转底部右侧子图的xticklabels,请使用:

plt.setp(plt.xticks()[1], rotation=30, ha='right') # ha is the same as horizontalalignment

这将底部右侧的子图的刻度标签旋转30度并使其右对齐(与使用autofmt_xdate时相同),而其他两个子图保持不变。


6
如果你正在处理子图,最好直接从轴对象中读取刻度标签对象,而不是依赖于全局的plt.xticks方法: plt.setp(ax.get_xticklabels(), rotation=30, ha='right') - Chaoste
@Chaoste 谢谢!我一直在尝试克服fig.autofmt_xdate()的使用,因为它有一个副作用:您只能看到底部子图的 x 刻度。你的答案帮了我很大的忙。 - chill appreciator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接