sharey ='所有' plt.subplots()中的参数未传递给df.plot()?

时间:2018-05-03 00:26:32

标签: python pandas matplotlib

我有一个我想切片的pandas数据帧,并在一个单独的子图中绘制每个切片。我想使用sharey='all'并让matplotlib决定一些合理的y轴限制,而不是必须在数据帧中搜索最小值和最大值并添加偏移量。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()

fig, axes = plt.subplots(nrows=0,ncols=0, sharey='all', tight_layout=True)

for i in range(1, len(df.columns) + 1):
    ax = fig.add_subplot(2,3,i)    
    iC = df.iloc[:, i-1]
    iC.plot(ax=ax) 

其中给出以下图:
enter image description here

事实上,无论我指定sharey'all''col''row'True或{{1 }})。使用False后我想要的是: enter image description here

有人可能会解释一下我在这里做错了什么吗?

2 个答案:

答案 0 :(得分:1)

以下版本只会为你的df-column添加你需要的那些轴并分享它们的y尺度:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()

fig = plt.figure(tight_layout=True)

ref_ax = None
for i in range(len(df.columns)):
    ax = fig.add_subplot(2, 3, i+1, sharey=ref_ax)
    ref_ax=ax
    iC = df.iloc[:, i]
    iC.plot(ax=ax) 

plt.show()

这里明确给出...add_subplot(2, 3, ...的网格布局参数当然可以根据len(df.columns)进行计算。

答案 1 :(得分:0)

您的地块不会被分享。您创建一个包含0行和0列的子图网格,即根本没有子图,但这些不存在的子图的y轴是共享的。然后,您创建一些其他(现有)子图,这些子图不共享。那些是绘制的。

相反,您需要将nrowsncols设置为一些有用的值,并绘制到那些因此创建的轴。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()

fig, axes = plt.subplots(nrows=2,ncols=3, sharey='all', tight_layout=True)

for i, ax in zip(range(len(df.columns)), axes.flat):
    iC = df.iloc[:, i]
    iC.plot(ax=ax) 

for j in range(len(df.columns),len(axes.flat)):
    axes.flatten()[j].axis("off")

plt.show()

enter image description here