2016-08-20 6 views
3

pandas df.plot()のドキュメントの「Basic Plotting:plot」セクションでお約束している、優雅な使いやすさと成功した結果を複製するのに苦労しています:pandas plot()の軸を自動推論する方法

あり

http://pandas.pydata.org/pandas-docs/stable/visualization.html#visualization

著者の最初の画像は、私は私のデータフレームからプロットしたいライングラフの種類にかなり近いです。彼らの最初のdfとその結果のプロットは、私が下の私のdfがプロットされたときに見えると思ったのと同じようにシングルライナーです。

私のDFは、次のようになります。

  2014-03-28 2014-04-04 2014-04-11 2014-04-18 \ 
Jenny Todd 1699.6  1741.6  1710.7  1744.2 

      2014-04-25 2014-05-02 2014-05-09 
Jenny Todd 1764.2  1789.7  1802.3 

彼らの第二の画像は、私は私のDFの複数のインデックスバージョンをプロットしてみたときに、私が望んものに非常に類似した複数行のグラフです。例:

    2014-06-13 2014-06-20 2014-06-27 \ 
William Acer  1674.7  1689.4  1682.0 
Katherine Baker  1498.5  1527.3  1530.5 


        2014-07-04 2014-07-11 2014-07-18 \ 
William Acer  1700.0  1674.5  1677.8 
Katherine Baker  1540.4  1522.3  1537.3 

        2014-07-25 
William Acer  1708.0 
Katherine Baker  1557.1 

ただし、プロットが表示されます。私は特徴のない3.3kbの画像と警告を受け取る:

/home/lee/test/local/lib/python2.7/site-packages/axpl/lib/python2.7/:UserWarning:同じ左を設定しようとしている==右は特異変換をもたらします。自動的に拡大します。 左= 0.0、右= 0.0 '左=%sの、右=%s' は)%(左、右))のドキュメントの

著者はDFのインデックスから推測プロット()関数を持っているように見えますx軸の値、y軸の範囲と値

この種の「軸」エラーを受け取った人は、さまざまなデータ、異なるインデックス、さまざまなシナリオ(たとえば、ある列を別の列に対してプロットしたり、複数の副プロットを作成するなど)を見つけることができます。しかし、私は彼らの問題を私のものにマッピングすることはできませんでした。

私のデータやコードについて、文書の一見類似しているデータや一見類似したコードとは異なるプロットの結果につながるものを解決するのに役立つ人がいるかどうかは疑問です。

マイコード:

print plotting_df # (This produces the df examples I pasted above) 
plottest = plotting_df.plot.line(title='Calorie Intake', legend=True) 
plottest.set_xlabel('Weeks') 
plottest.set_ylabel('Calories') 
fig = plt.figure() 
plot_name = week_ending + '_' + collection_name + '.png' 
fig.savefig(plot_name) 

(注)このデータフレームは、スクリプト内で動的に何度も作成されています。任意の実行で、スクリプトは異なる日付のセット、異なる名前の人、プロットする異なる番号を取得します。だから、あらかじめプロットするためのインデックスと凡例のラベルがどのような文字列になるかは予測できません。私は形式について予測可能です。

私のデータフレームの日付インデックスは、参照されているドキュメントの説明とは異なる形式の日付になっています。これが原因ですか?それがそうであるかどうかにかかわらず、この問題をどのようにして最善を尽くすべきですか?以下のコメントに答えるために2016年8月24日に追加されました

私のデータを再作成することができないことについて

plotting_dfは、はるかに大きなデータフレームのサブセットとしてオンザフライで作成されます。これは単なるインデックス(または時には複数のインデックス)と、より大きなデータフレームから抽出された日付列の一部です。 plotting_dfを生成するコードはうまく動作し、いつも期待通りの形式の正しいインデックスと列を持つplotting_dfを生成します。

私はこのPythonコードでplotting_dfに格納するデータセットの作成をシミュレートすることができる:

plotting_1 = { 
      '2014-03-28': 1699.6, 
      '2014-04-04': 1741.6, 
      '2014-04-11': 1710.7, 
      '2014-04-18': 1744.2, 
      '2014-04-25': 1764.2, 
      '2014-05-02': 1789.7, 
      '2014-05-09': 1802.3 
     } 

plotting_df = pd.DataFrame(plotting_1, index=['Jenny Todd']) 

及びIは、複数のインデックスの作成をシミュレートすることができるが、このPythonコードでplotting_df:

plotting_2 = { 
      'Katherine Baker': { 
       '2014-06-13': 1498.5, 
       '2014-06-20': 1527.3, 
       '2014-06-27': 1530.5, 
       '2014-07-04': 1540.4, 
       '2014-07-11': 1522.3, 
       '2014-07-18': 1537.3, 
       '2014-07-25': 1557.1 
      }, 
      'William Acer': { 
       '2014-06-13': 1674.7, 
       '2014-06-20': 1689.4, 
       '2014-06-27': 1682.0, 
       '2014-07-04': 1700.0, 
       '2014-07-11': 1674.5, 
       '2014-07-18': 1677.8, 
       '2014-07-25': 1708.0 
      } 
} 

plotting_df = pd.DataFrame.from_dict(plotting_2) 

plotdf = plotting_df.T 
plotdf.index = pd.to_datetime(plotdf.index) 

このように、私の元のコードは次のようになります。

print plotting_df # (This produces the df examples I pasted above) 
plotdf = plotting_df.T # Transform the df - date columns to indices 
plotdf.index = pd.to_datetime(plotdf.index) # Convert indices to datetime 
plottest = plotdf.plot.line(title='Calorie Intake', legend=True) 
plottest.set_xlabel('Weeks') 
plottest.set_ylabel('Calories') 
fig = plt.figure() 
plot_name = week_ending + '_' + collection_name + '.png' 
fig.savefig(plot_name) 

しかし、私はまだ同じ結果を得ています(空の3.3kbイメージが作成されます)。

私はplotdfの最初のインスタンスを印刷したときにトランスフォームを追加しても違いがないことに注意しました。だから私は他の変換をしなければなりませんか?

+0

私はあなたのデータなしであなたのグラフを再作成することはできません。しかし、心に浮かぶ考えは1です。時系列はインデックスである必要があり、列にはそれがあります。代わりにplotdf = plotting_df.Tをプロットしてください。 2.それは、timesdindexであることを確認します。これを行うには、plotdf.index = pd.to_datetime(plotdf.index) – piRSquared

答えて

1

これはあなたの問題です:

fig = plt.figure() 
plot_name = week_ending + '_' + collection_name + '.png' 
fig.savefig(plot_name) 

あなたが最初のものを作成して、あなただけの、第2の空の図を保存した後に2番目の図を作成しています。ただ、ラインfig = plt.figure()を取り出し、あなたが持っている必要がありfig.savefig

plt.savefigに変更します

print plotting_df # (This produces the df examples I pasted above) 
plotdf = plotting_df.T # Transform the df - date columns to indices 
plotdf.index = pd.to_datetime(plotdf.index) # Convert indices to datetime 
plottest = plotdf.plot.line(title='Calorie Intake', legend=True) 
plottest.set_xlabel('Weeks') 
plottest.set_ylabel('Calories') 
plot_name = week_ending + '_' + collection_name + '.png' 
plt.savefig(plot_name) 
関連する問題