подзаговор в Python с использованием цикла - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь перебрать 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 (каждый график будет иметь 3 строки, X Y и Z) * ​​1006 *

Я пытался перебрать списки букв и номеров, потому что мой 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 fig2 1 x 2, с графиками x1, y1 и z1, а также x2, y2 и z2

Спасибо

1 Ответ

0 голосов
/ 27 августа 2018

Один из способов добиться желаемого результата - это:

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 , чтобы создать фрейм данных, где вы сможете автоматически извлекать необходимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...