Matplotlib - Pandas - 在子图中使用twinx坐标轴时无法设置xlabel和xticks

6

我曾经有一个类似的问题,之前已经得到了答案。然而,与之前不同的是它涉及到使用Pandas包。

这是我的先前问题:matplotlib - No xlabel and xticks for twinx axes in subploted figures

所以,我的问题和上一个问题一样,就是当使用这段Python代码时,为什么第一行图表没有显示xlabel和xticks。

两个注意事项:

  1. 我也使用了subplots而不是gridspec,但结果相同。
  2. 如果取消注释此代码中与在每个图表中使用Pandas相关的任何已注释行之一,则xlabel和xticks将消失!

import matplotlib.pyplot as plt
import matplotlib.gridspec as gspec
import numpy as np
import pandas as pd
from math import sqrt

fig = plt.figure() 
gs = gspec.GridSpec(2, 2)
gs.update(hspace=0.7, wspace=0.7)
ax1 = plt.subplot(gs[0, 0])
ax2 = plt.subplot(gs[0, 1])
ax3 = plt.subplot(gs[1, 0])
ax4 = plt.subplot(gs[1, 1])


x1 = np.linspace(1,10,10)


ax12 = ax1.twinx()
ax1.set_xlabel("Fig1")
ax12.set_xlabel("Fig1")
ax1.set_ylabel("Y1")
ax12.set_ylabel("Y2")
# pd.Series(range(10)).plot(ax=ax1)
ax12.plot(x1, x1**3)




ax22 = ax2.twinx()
ax2.set_xlabel("Fig2")
ax22.set_xlabel("Fig2")
ax2.set_ylabel("Y3")
ax22.set_ylabel("Y4")
# pd.Series(range(10)).plot(ax=ax2)
ax22.plot(x1, x1**0.5)


ax32 = ax3.twinx()
ax3.set_xlabel("Fig3")
ax32.set_xlabel("Fig3")
ax3.set_ylabel("Y5")
ax32.set_ylabel("Y6")
# pd.Series(range(200)).plot(ax=ax3)



ax42 = ax4.twinx()
ax4.set_xlabel("Fig4")
ax42.set_xlabel("Fig4")
ax4.set_ylabel("Y7")
ax42.set_ylabel("Y8")
# pd.Series(range(10)).plot(ax=ax42)



plt.subplots_adjust(wspace=0.8, hspace=0.8)
plt.show()

这个问题有什么评论或解决方案吗?非常感谢任何帮助! - mgNobody
如果在创建 twinx 之前绘制 pandas 数据,似乎可以正常工作。 - Scimonster
2个回答

4
我刚刚遇到了同样的问题,因为我混用了使用matplotlib和Pandas生成的图表。您不应该使用Pandas进行绘图,以下是如何替换它:
pd.Series(range(10)).plot(ax=ax42)

使用

ax42.plot(pd.Series(range(10))

虽然这是解决问题的一种更简单的方法,但我不会完全说“你不应该使用pandas绘图”,因为在这个问题x-ticks disappear when plotting on subplots sharing x-axis中分享了一个解决此问题的变通方法。 - Afsan Abdulali Gujarati

0

正如Scimonster上面提到的那样,当我在创建twinx轴之前绘制所有的pandas时,它对我起作用。

我有一些在twinx中的图形,这些图形也来自Pandas Dataframe对象(x,t图)。在开始绘图之前,我创建了单独的列表,然后在绘制第一个pandas图之后使用它们进行绘图。

总结我的工作流程是: 1. 为twinx图形创建列表 2. 打开绘图并使用普通轴绘制所有pandas图形。 3. 创建twinx轴 4. 在twinx轴上绘制列表

幸运的是,这个流程对我有效。


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