web-dev-qa-db-ja.com

iPython / Jupyterノートブックとパンダ、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つの別々のプロットがあると予想されますが、代わりに2つのシリーズが1つの単一のプロットにマージされます。何故ですか? forループを保持する2つの別々のプロットを取得するにはどうすればよいですか?

25
alec_djinn

グラフをプロットした後、 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()
36
Andrey Sobolev

IPythonノートブックでは、これを行う最適な方法はサブプロットを使用することです。同じFigure上に複数の軸を作成してから、ノートブックでFigureをレンダリングします。例えば:

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

20
jmz