如何通过遍历数据框列的列表来创建自动子图集

时间:2019-03-25 17:50:26

标签: python matplotlib foreach seaborn

我想创建高效的代码,在其中我可以将一组数据框列传递给for循环或列表推导,并根据类型的不同返回一组相同类型的子图(每个变量一个)。我要使用matplotlib或seaborn地块。我正在寻找一种与图形类型无关的方法。

我只尝试使用matplotlib创建代码。下面,我提供了一个简单的数据框和我尝试过的最新代码。

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.DataFrame({"A": [1, 2,8,3,4,3], "B": [0, 2,4,8,3,2], "C": [0, 0,7,8,2,1]},
                 index =[1995,1996,1997,1998,1999,2000] )
df.index.name='Year'

fig, axs = plt.subplots(ncols=3,figsize=(8,4))
for  yvar in df:
    ts = pd.Series(yvar, index = df.index)
    ts.plot(kind = 'line',ax=axs[i])
    plt.show()

我希望看到传递给循环的每个变量的子图。

2 个答案:

答案 0 :(得分:2)

同时环绕列和轴。在循环外显示图。

top20(1987)

或者,您也可以直接绘制完整的数据框

fig, axs = plt.subplots(ncols=len(df.columns), figsize=(8,4))
for ax, yvar in zip(axs.flat, df):
    df[yvar].plot(ax=ax)
plt.show()

答案 1 :(得分:1)

这就是您要寻找的

import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"A": [1, 2,8,3,4,3], "B": [0, 2,4,8,3,2], "C": [0, 0,7,8,2,1]},
                 index =[1995,1996,1997,1998,1999,2000] )

plt.figure(figsize=(10,10))
for i, col in enumerate(df.columns):
    plt.subplot(1,3,i+1)
    plt.plot(df.index, df[col], label=col)
    plt.xticks(df.index)
    plt.legend(loc='upper left')
plt.show()

enter image description here

使用plt.subplot(no_of_rows, no_of_cols, current_subplot_number)将当前绘图设置为子绘图。完成的任何绘图将转到current_subplot_number