IPython/Jupyter Notebook и Pandas, как построить несколько графиков в цикле for?

Рассмотрим следующий код, запущенный в iPython/Jupyter Notebook:

from pandas import *
%matplotlib inline

ys = [[0,1,2,3,4],[4,3,2,1,0]]
x_ax = [0,1,2,3,4]

for y_ax in ys:
    ts = Series(y_ax,index=x_ax)
    ts.plot(kind='bar', figsize=(15,5))

Я ожидал бы, что у меня будет 2 отдельных графика, а вместо этого я получаю две серии, объединенные в один сюжет. Это почему? Как я могу получить два отдельных графика, поддерживающих цикл for?

Ответы

Ответ 1

Просто добавьте вызов plt.show() после того, как вы построите график (для этого вам может понадобиться import matplotlib.pyplot), например

from pandas import *
import matplotlib.pyplot as plt
%matplotlib inline

ys = [[0,1,2,3,4],[4,3,2,1,0]]
x_ax = [0,1,2,3,4]

for y_ax in ys:
    ts = Series(y_ax,index=x_ax)
    ts.plot(kind='bar', figsize=(15,5))
    plt.show()

Ответ 2

В ноутбуке IPython лучший способ сделать это - часто с подзаговорами. Вы создаете несколько осей на одной фигуре, а затем рисуете фигуру в записной книжке. Например:

import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline

ys = [[0,1,2,3,4],[4,3,2,1,0]]
x_ax = [0,1,2,3,4]

fig, axs = plt.subplots(ncols=2, figsize=(10, 4))
for i, y_ax in enumerate(ys):
    pd.Series(y_ax, index=x_ax).plot(kind='bar', ax=axs[i])
    axs[i].set_title('Plot number {}'.format(i+1))

генерирует следующие диаграммы

enter image description here