在matplotlib中启用sharex时自定义刻度标签

时间:2016-06-24 13:25:06

标签: python matplotlib

我有两个共享x轴的叠加子图,对于两个子图,标记的可见性设置为false,因为我不想看到标记标记。在绘制了两个子图之后,我想在x-asis上添加一些额外的刻度,仅用于第二个子图,但它们不必成为主要的刻度。 我的意思是,这样做:

        #xticks = list of x points
        #xlabs = list of labels
        #secondplot.set_xticks(xticks) 
        #secondplot.set_xticklabels(xlabs)

将根据这些新的刻度改变第一个sublplot网格,就像它们成为新的主要刻度一样。有没有办法在第二个子图中标记一些x轴点而不影响整个图区域?谢谢

2 个答案:

答案 0 :(得分:2)

我知道晚会很晚,但是我遇到了类似的问题,并希望分享我的解决方案,以防万一其他人需要帮助。

您可以使用matplotlib.axes.Axes.tick_params来控制轴的主要和次要刻度线的样式。将第一个子图的刻度长度设置为0应该可以解决问题:

ax.tick_params(axis="x", which="both", length=0.)

axis (“ x”,“ y”或“ both”)选择设置生效的轴, which (“ major”,“次要”或“两者”)选择报价类型。 当然,您还可以使用ax.set_xticks(ticks, minor=False)设置主要和次要刻度线。完整示例:

import matplotlib.pyplot as plt

fig, axarr = plt.subplots(2, 1, sharex="col")
axarr[0].plot(range(11))
axarr[1].plot(range(11)[::-1])

axarr[0].tick_params(axis="x", which="both", length=0.)
axarr[1].set_xticks(range(0, 11, 3))
axarr[1].set_xticks(range(0, 11), minor=True)

plt.show()

产生:https://i.stack.imgur.com/oc7y0.png

答案 1 :(得分:1)

这适用于在使用sharex时从单个轴上删除刻度标签,但我没有看到解决方案也删除了刻度线。

import matplotlib.pylab as pl

pl.figure()
ax1=pl.subplot(211)
ax1.plot([0,10],[0,10])

ax2=pl.subplot(212, sharex=ax1)
ax2.plot([0,10],[10,0])

pl.setp(ax1.get_xticklabels(), visible=False)

enter image description here