2016-09-19 12 views
3

1つのオブジェクトに複数のプロットを作成するスクリプトを作成しました。私が求めている結果は、各プロットが異なるy軸スケールを持つが、x軸は固定された日付であるように、2つのプロットを重ね合わせたものである。ただし、プロットの1つ(上端)のみが正しく作成され、下のプロットは表示されますが空です。つまり、geom_lineは表示されません。さらに、2番目のプロットのy軸は、minからmaxの値の範囲と一致しません。私はまた、facet_grid (scales="free")を使ってみましたが、y軸の変化はありませんでした。第2のグラフのy軸は、0から0.05の範囲を有する。1つのオブジェクトに複数のプロットを作成する

私は過去の数週間に日付範囲を制限しました。これは私が使用しているコードである:

df = df.set_index('date') 
    weekly = df.resample('w-mon',label='left',closed='left').sum() 
    data = weekly[-4:].reset_index() 
    data= pd.melt(data, id_vars=['date']) 
    pplot = ggplot(aes(x="date", y="value", color="variable", group="variable"), data) 
    #geom_line() 
    scale_x_date(labels = date_format('%d.%m'), 
         limits=(data.date.min() - dt.timedelta(2), 
           data.date.max() + dt.timedelta(2))) 
    #facet_grid("variable", scales="free_y") 
    theme_bw() 

データフレームのサンプル(DF)、その各変数xと、この場合、「日付」にあるインデックスの値を含む毎日のセット:

date   x  a 
2016-08-01  100 20 
2016-08-02  50 0 
2016-08-03  24 18 
2016-08-04  0  10 

データフレームのサンプル(to_plot) - 毎週概要:前にDFのデータフレームを追加していないため

  date  variable value 
0 2016-08-01  x  200 
1 2016-08-08  x  211 
2 2016-08-15  x  104 
3 2016-08-22  x  332 
4 2016-08-01  a   8 
5 2016-08-08  a   15 
6 2016-08-15  a  22 
7 2016-08-22  a  6 

申し訳ありません。

+0

は、誰かが私はいくつかの助けを持っているあなたと共有することができ、より何を指定してくださいもらえますか?私はまだ2番目のグラフが正しいy軸の範囲を持たず、プロットされていない理由をまだ分かりません。それは私のローカル/家庭環境でもうまく動作します。 – OAK

+0

最初に実行するために、(関連する...)コードをすべて投稿することができます:)例えば、ここでは、あなたのコードに 'df'が本当に何であるか分かりません。 – Daneel

+0

@Daneelが投稿を更新します。ありがとう。 – OAK

答えて

2

プロット・ディレクティブgeom_line()scale_x_date()などの呼び出しは、スクリプト内で独自に行われています。それらをプロットオブジェクトに接続しません。したがって、あなたのプロットには何の影響もありません。既存のプロットオブジェクトにプロットディレクティブを適用するために

は、グラフィック言語を使用して+オペレータとそれらを接続することで、あなたのプロットオブジェクトにそれらを「追加します」。

結果(意図したように):

ggplot in python with facet_grid

フルスクリプト:

from __future__ import print_function 

import sys 
import pandas as pd 
import datetime as dt 
from ggplot import * 

if __name__ == '__main__': 
    df = pd.DataFrame({ 
     'date': ['2016-08-01', '2016-08-08', '2016-08-15', '2016-08-22'], 
     'x': [100, 50, 24, 0], 
     'a': [20, 0, 18, 10] 
    }) 

    df['date'] = pd.to_datetime(df['date']) 

    data = pd.melt(df, id_vars=['date']) 
    plt = ggplot(data, aes(x='date', y='value', color='variable', group='variable')) +\ 
     scale_x_date(
      labels=date_format('%y-%m-%d'), 
      limits=(data.date.min() - dt.timedelta(2), data.date.max() + dt.timedelta(2)) 
     ) +\ 
     geom_line() +\ 
     facet_grid('variable', scales='free_y') 

    plt.show()