我想做的是在一个子图中画一个2x2的图表。然后,对于每个图表,我将使用两个y轴。因此,我为每个图表使用了twinx()方法。正如您在共享的图中看到的那样,问题在于它不显示第一行的xlabel和xticks。对于第二行,一切都很好。我在图中用红色字体指出了问题(“没有xlabel和xticks!!!”)。
每个图形都有自己的x轴和y轴,并且没有共享。
我已经调整了这个代码并缩小了问题的范围。这是因为我在上面的行中使用了twinx()。如果我尝试删除辅助y轴,一切就会恢复正常,上面行的xlabel和ylabel将正确显示。
我不知道问题在哪里!
这是我正在工作的代码。
每个图形都有自己的x轴和y轴,并且没有共享。
我已经调整了这个代码并缩小了问题的范围。这是因为我在上面的行中使用了twinx()。如果我尝试删除辅助y轴,一切就会恢复正常,上面行的xlabel和ylabel将正确显示。
我不知道问题在哪里!
这是我正在工作的代码。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from io import StringIO
s = StringIO(u""" amount price
A 40929 4066443
B 93904 9611272
C 188349 19360005
D 248438 24335536
E 205622 18888604
F 140173 12580900
G 76243 6751731
H 36859 3418329
I 29304 2758928
J 39768 3201269
K 30350 2867059""")
df = pd.read_csv(s, index_col=0, delimiter=' ', skipinitialspace=True)
fig = plt.figure()
ax_2 = fig.add_subplot(222, sharex=None, sharey=None)
ax_22 = ax_2.twinx()
ax_2.plot([1, 3, 5, 7, 9])
ax_22.plot([1.0/x for x in [1, 3, 5, 7, 9]])
ax_2.set_xlabel("AX2 X Lablel")
ax_2.set_ylabel("AX2 Y Lablel")
ax_22.set_ylabel("AX2_Twin Y Lablel")
ax_2 = fig.add_subplot(223, sharex=None, sharey=None)
ax_22 = ax_2.twinx()
ax_2.plot([100, 300, 500, 700, 900])
ax_22.plot([x*x for x in [100, 300, 500, 700, 900]])
ax_2.set_xlabel("AX3 X Lablel")
ax_2.set_ylabel("AX3 Y Lablel")
ax_22.set_ylabel("AX3_Twin Y Lablel")
ax_2 = fig.add_subplot(224, sharex=None, sharey=None)
ax_22 = ax_2.twinx()
ax_2.set_xlabel("AX4 X Lablel")
ax_2.set_ylabel("AX4 Y Lablel")
ax_22.set_ylabel("AX4_Twin Y Lablel")
ax = fig.add_subplot(221, sharex=None, sharey=None)
ax2 = ax.twinx()
width = 0.4
df.amount.plot(kind='bar', color='red', ax=ax, width=width, position=1, sharex=False, sharey=False)
df.price.plot(kind='bar', color='blue', ax=ax2, width=width, position=0, sharex=False, sharey=False)
ax.set_xlabel("Alphabets")
ax.set_ylabel('Amount')
ax2.set_ylabel('Price')
plt.subplots_adjust(wspace=0.8, hspace=0.8)
plt.savefig("t1.png", dpi=300)
plt.show()
它生成以下图形:
编辑:
感谢您的回答。然而,当使用Pandas绘制图表时,我的问题仍然存在。我发布了一个新的问题,请查看:
matplotlib - pandas - no xlabel and xticks for twinx axes in subploted figures
gridspec
在我的 Python 2.7 上似乎完美运行,我认为这可能是问题的根源,因为你提到你正在使用 Python 3。我在使用纯 Python,没有 IPython,也没有其他花哨的东西 :)。并且,我在保存的文件和plt.show()
的输出窗口中都看到了这种行为。我在我的机器上使用了你的代码,并且对于我想要的所有 4 个图表和所有轴,它都起作用了 :)。我接受了你的答案作为解决方案,但由于我从 stackoverflow 的角度来看经验不足,它可能不会显示为答案。 - mgNobody