質問: animation.FuncAnimation(fig, plot, interval= 120) plt.show() ``` 試したこと。 上記の ``` show.plot(kind='bar) ``` を ``` ax.bar(show.index, show['column1']) ``` このように書いても全く表示されません。 その他、ネットに書いてあることを手探りでかなりやってみましたが、どうもうまくいきません。 DataFrameのデータ(変数名:show)はリアルタイムで更新できています。 (print関数にて更新できていることを確認済み) 何が違うのでしょうか? 別の分析において、データがリスト形式の場合はうまくアニメーション表示できたのですが(他に4分析の経験あり)、初めてデータフレームをあつかったとたん表示しない、動かなくなりました。 独学で勉強を初めて一ヶ月半程度の初心者です。 本をかなり買いあさりましたが、アニメーション(matplotlib関係)についての詳しい説明がなく、困っております。 ご教授いただけると幸いです。 また、この本を読め!というのがありましたら、合わせて教えていただけると嬉しいです。 よろしくお願いいたします。
回答: 自分もやってみました。2か所問題があるようです。 (1) 関数を呼び出してない `plt.cla`では関数オブジェクトを参照しているだけで、それを呼び出せてません。 `plt.cla()`でないといけませんね。括弧の付け忘れです。 (2) axisを指定していない こちらが自分にはすぐ分かりませんでした。 `DataFrame.plot`のリファレンスを見るとaxのデフォルトがNoneになってます。じゃぁNoneだったらいったいどのaxisに描画するの?っていうのがドキュメントのどこにも書いてない気がするのですが・・・ 明示的にaxパラメーターを指定してやったらどうなるだろうと思ってやってみたら描画されました。なんだか釈然としない気持ちです... 実際に動かしたコードは以下です。 ``` import pandas as pd import matplotlib.animation as animation import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) def calc(): from numpy.random import rand n = 5 df = pd.DataFrame(rand(n, 2), columns=['sell', 'buy']) return df['sell'], df['buy'] def plot(loop_count): plt.cla() df_sell, df_buy = calc() show = pd.concat([df_buy, df_sell], axis=1) show.plot.bar(ax=ax) # ax.bar(show.index, show['sell']) # これでも表示されました。 ani = animation.FuncAnimation(fig, plot, interval=1000) plt.show() ``` なお、axを指定しない場合でもDataFrame.plotの戻り値として `` が返ってきてるので何某かは描画しているのだろうと思いますが自分にはDataFrameが何をしているのかわかりませんでした。 質問者さんが追記しておられるように`ax.bar(show.index, show['xxx'])`とやると自分のコードでは表示されました(上のコードでコメントとして書いてあります)。ひょっとするとデータフレーム自体がおかしかったりしないでしょうか? 基本的な使い方って最初はなかなかわからないと思うんですが、そういうときは自分が書いたように単純なサンプルデータを作る完全なプログラムを作成してそれを質問に書いた方がよいと思います。そうした方がDataFrame.plotやFuncAnimationの使い方だけに集中して調べることができますし、閲覧者が質問者さんのコードの問題を確認しやすくなります。 質問の際には「**問題が再現するような最小限のコードを作成して、それを省略せずに記載する**」ということが**非常に大事**ということを申し添えておきます。 問題の本質と関係ない部分は質問する前の段階でコードそのものからごっそりそぎ落とし問題の本質に関係する部分のみを残すと「質問側と閲覧側で問題を厳密に共有できる効果」があるのですね。曖昧な点があると問題点の焦点からはずれやすくなってしまうと思います。 そうした点にも留意するとよいのではないでしょうか?