使用循环在python中进行子绘图

时间:2018-08-27 09:50:18

标签: python pandas matplotlib

我正在尝试遍历df以在子图中绘制一些数据。我的数据列是一个字母,再加上一个整数。

df = {'x1': [2, 4, 7, 5, 6],
     'x2': [2, 7, 2, 6, 3],
     'y1': [4, 3, 2, 8, 7],
     'y2': [2, 2, 4, 6, 4],
     'z1': [2, 2, 2, 6, 7],
     'z2': [3, 1, 4, 5, 9]}
df = pd.DataFrame(df, index=range(0,5))

letterlist=['x', 'y', 'z']
numberlist=['1', '2']
tickers = df.columns

其中df的索引是我df中的一组日期

我试图双重实现子图: 1)A,B和C的一段代码(每个图都有2行) 2)另一段1和2的代码(每个图在X Y和Z中有3行)

我试图遍历字母列表和数字列表,因为我的df大得多:

所以我尝试了:

fig = plt.figure(figsize=(8,8))

for ticker, num in zip(tickers, xrange(1,len(letterlist))):
        ax = fig.add_subplot(len(letterlist),1,num)
        ax.plot(df[ticker])
        ax.set_title(ticker)

plt.tight_layout()
plt.show()

但是我一直收到错误,我认为索引编制是错误的..所以卡住了。有什么想法吗?

预期输出为: fig1 1x3子图,其中绘制了x1和x2,y1和y2,z1和z2 图2 1x2子图,其中绘制了x1,y1和z1,并绘制了x2,y2和z2

谢谢

1 个答案:

答案 0 :(得分:1)

获得所需输出的一种方法是:

from matplotlib import pyplot as plt
import pandas as pd
#define the dataframe
df = {'x1': [2, 4, 7, 5, 6],
     'x2': [2, 7, 2, 6, 3],
     'y1': [4, 3, 2, 8, 7],
     'y2': [2, 2, 4, 6, 4],
     'z1': [2, 2, 2, 6, 7],
     'z2': [3, 1, 4, 5, 9]}
df = pd.DataFrame(df, index=range(0,5))

letters = 3
numbers = 2
tickers = df.columns

#first figure letterwise presentation
fig, axes = plt.subplots(nrows = letters, ncols = 1, figsize=(8,8))

for i, pair in enumerate([tickers[i:i+numbers] for i in range(0, len(tickers), numbers)]):
    ax = axes[i]
    for item in pair:
        ax.plot(df[item], label = item)
    ax.legend()
    ax.set_title(", ".join(pair))
plt.tight_layout()

#second figure numberwise presentation
fig, axes = plt.subplots(nrows = numbers, ncols = 1, figsize=(8,8))

for i, pair in enumerate([tickers[i::numbers] for i in range(numbers)]):
    ax = axes[i]
    for item in pair:
        ax.plot(df[item], label = item)
    ax.legend()
    ax.set_title(", ".join(pair))
plt.tight_layout()

plt.show()

样本输出: enter image description here

但是您仍然必须手动定义,您要拥有的字母和数字的数量以及列必须按预期的顺序[x1,x2,x3,...,xn,y1,y2,y3,... ,yn,z1 ...]。您可能需要研究pandas multiindex来构建一个数据框,在其中可以自动提取必要的信息。