Python 2.7 Matplotlib:xticks标签未显示

Python 2.7 Matplotlib:xticks标签未显示,python-2.7,matplotlib,Python 2.7,Matplotlib,我是matplotlib的新手,有个小问题。我试着把3个图叠在一起,共享x轴和2个不同的y轴。 这是我当前的代码 import numpy as np import matplotlib.pyplot as plt periods = range(1,13) n0 = [4.2, 6.7, 10.6, 51.3, 339, 45.6, 56.3, 112.9, 182.7, 185.7, 126.2, 25.39] alp = [2.12, 2.14, 2.19, 2.35, 2.54, 2.

我是matplotlib的新手,有个小问题。我试着把3个图叠在一起,共享x轴和2个不同的y轴。 这是我当前的代码

import numpy as np
import matplotlib.pyplot as plt

periods = range(1,13)
n0 = [4.2, 6.7, 10.6, 51.3, 339, 45.6, 56.3, 112.9, 182.7, 185.7, 126.2, 25.39]
alp = [2.12, 2.14, 2.19, 2.35, 2.54, 2.33, 2.34, 2.43, 2.45, 2.46, 2.466, 2.249]
B = [0.045, 0.041, 0.04, 0.04, 0.057, 0.048, 0.044, 0.057, 0.054, 0.065, 0.06, 0.045]
emin = [166, 201.9, 215, 270.7, 351.8, 263.7, 302.2, 323.6, 328.7, 346.1, 279.5, 259.8]
emax = [21806, 28407, 5706, 22087, 17978, 11699, 19440, 17988, 26938, 14812, 14195, 26121]
eq = [7.8, 11.8, 13.3, 15.2, 8.87, 10.5, 13.8, 7.6, 11.5, 7.4, 6.4, 13.5]

f, (ax1, ax2, ax3) = plt.subplots(3, sharex = True)
ax1.scatter(periods, emin, c="k")
ax1.set_ylabel(r"$E_{min}")
ax1.yaxis.set_ticks(range(160, 380, 40))

ax4 = ax1.twinx()
ax4.scatter(periods, n0, c="r")
ax4.set_ylabel(r"$N_0$", color = 'r')
ax4.tick_params(colors = 'r')
ax4.yaxis.set_ticks(np.arange(20, 340, 50))

ax2.scatter(periods, emax, c="k")
ax2.set_ylabel(r"$E_{max}$")
ax2.yaxis.set_ticks(np.arange(5000, 30000, 5000))
ax5 = ax2.twinx()
ax5.scatter(periods, alpha, c="r")
ax5.set_ylabel("alp", color = 'r')
ax5.tick_params(colors = 'r')
ax5.yaxis.set_ticks(np.arange(2.1, 2.6, 0.1))

ax3.scatter(periods, eq, c="k")
ax3.set_ylabel("Eq")
ax3.yaxis.set_ticks(np.arange(6, 15, 2))
ax3.set_xlabel("Periods")
ax6 = ax3.twinx()
ax6.scatter(periods, B, c="r")
ax6.set_ylabel("B", color = 'r')
ax6.tick_params(colors = 'r')
ax6.yaxis.set_ticks(np.arange(0.02, 0.09, 0.02))
ax6.xaxis.set_ticks(range(1,13))

f.subplots_adjust(hspace = 0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)
plt.show()
但是没有显示x轴标签。标签本身(“周期”)很好,但刻度不好。我试着换线

ax6.xaxis.set_ticks(range(1,13))
每隔一个号码,但仍然不起作用。有什么帮助吗? 在旁注中,如何将y轴标签旋转90度以使其水平?我尝试在ylabel中包含
rotation=90
,但它没有改变(尽管其他值也可以)

非常感谢


编辑:忘记添加,如果我擦除双轴,它工作正常

为了显示x记号,您需要将第二行更改为最后一行,并设置
visible=True
。要将y标签旋转90度,请在执行此操作时使用
rotation=
,但要将旋转设置为
0
。这样做可能会使标签和记号重叠。您可以使用
ax.set\u ylabel()
中的
labelpad=
删除此项。这是轴和标签之间的间距

f, (ax1, ax2, ax3) = plt.subplots(3, sharex = True)
ax1.scatter(periods, emin, c="k")
ax1.set_ylabel(r"$E_{min}$",rotation=0,labelpad=20)
ax1.yaxis.set_ticks(range(160, 380, 40))

ax4 = ax1.twinx()
ax4.scatter(periods, n0, c="r")
ax4.set_ylabel(r"$N_0$", color = 'r',rotation=0,labelpad=10)
ax4.tick_params(colors = 'r')
ax4.yaxis.set_ticks(np.arange(20, 340, 50))

ax2.scatter(periods, emax, c="k")
ax2.set_ylabel(r"$E_{max}$",rotation=0,labelpad=20)
ax2.yaxis.set_ticks(np.arange(5000, 30000, 5000))
ax5 = ax2.twinx()
ax5.scatter(periods, alp, c="r")
ax5.set_ylabel("alp", color = 'r',rotation=0,labelpad=15)
ax5.tick_params(colors = 'r')
ax5.yaxis.set_ticks(np.arange(2.1, 2.6, 0.1))

ax3.scatter(periods, eq, c="k")
ax3.set_ylabel("Eq",rotation=0,labelpad=20)
ax3.yaxis.set_ticks(np.arange(6, 15, 2))
ax3.set_xlabel("Periods")
ax6 = ax3.twinx()
ax6.scatter(periods, B, c="r")
ax6.set_ylabel("B", color = 'r',rotation=0,labelpad=10)
ax6.tick_params(colors = 'r')
ax6.yaxis.set_ticks(np.arange(0.02, 0.09, 0.02))
ax1.xaxis.set_ticks(np.arange(1, 13, 1))


f.subplots_adjust(hspace = 0,left=0.14,right=0.90)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=True)
plt.show()
这将生成以下绘图:


您可能需要尝试使用
标签垫
,以获得您想要的标签,因为每个轴的刻度标签长度都不相同。

请查看从第二行到最后一行<代码>可见=错误?非常感谢,这很有效。但是为什么在添加twix命令时会发生变化呢?据我所知,
plt.setp([a.getxticklabels(),a in f.axes[:-1]],visible=False)
隐藏了每个x轴刻度标签,但最后一个(底部的那个)除外。这在没有双轴的情况下有效,因此子地块1和2的刻度实际上仍然存在,但是因为
hspace=0
我们只看到底部的刻度。我想这并不重要,因为它会产生所需的输出,但我不知道为什么双轴会出现这种情况。或者更确切地说,我不知道为什么
plt.setp([a.get_xticklabels(),for a in f.axes[:-1]],visible=False)
在这种情况下不会隐藏前两个子批次的刻度