2016-10-11 15 views
3

私は許してください...R - ggplot2 geom_area 1つのカテゴリのみが表示されますか?

私はggplot2を使ってRでtimeseriesプロットをしようとしています。私は、与えられた日付の値の下に記された2つの折れ線グラフを表示したいと思います。私はgeom_area(position = "identity")関数でこれをしようとしています。

ただし、グラフには1色しか表示されません(両方とも凡例に表示されます)。私はmelt()を使ってデータを溶かし始めました.3つのカラム(X =時間、変数=地下水、値=地下水の標高)で作業しています。以下は私のコードの簡略化されたバージョンと、私が得るもののスクリーンショットです。

Bank01MWtest<-data.frame(X=(c(1,2,2,1)),variable=(c("MW-01A","MW-01A","MW-01B","MW-01B")),value=(c(576,571,584,580))) 

ggplot(data=Bank01MWtest, aes(x=X, y=value,group=variable))+geom_area(position="identity", aes(fill=variable))+geom_line(aes(color=variable))+coord_cartesian(ylim=c(570,590)) 

2色を表示したい。 MW.01Aライン以下の1色とMW.01Bライン以下の1色。

Elevation Data

Updated to be reproducible

任意のヘルプ?

+2

あなたは最小限の[再現可能な例]を提供しなければならない(http://stackoverflow.com/questions/ 5963269/how-to-make-a-great-r-reproducible-example)とサンプル入力データを比較すると、何が起こっているのかがはっきりしています。テストするためにコードをRにコピー&ペーストすることができれば、より簡単に手助けすることができます。 – MrFlick

+3

あなたは両方の色を持っていますが、ある透明色を別の色の上に置くと、別の色に合成されます。参照するには、アルファを削除します。両方のグループを見る必要があれば、 'fill = rev(variable)'を使ってどの変数が最初に描画されるかを逆にすることができます。 – aosmith

+0

申し訳ありません。私はOPを更新しました。新しい画像も更新されました。 – BenO

答えて

0

私はがgeom_ribbonggplot2に置き換えられていると考えていますので、後者は私の解決策で使用します。このソリューションでは、データを長めから広範囲に再構成する必要があり、それぞれの凡例カテゴリに独自の列を付ける必要があります。 reshape2パッケージ内のdcast関数でこれを行います。

異なるymaxのレイヤーを追加し、fillオプションで凡例ラベルを割り当て、次にscale_fill_manual機能を使用して凡例を追加します。

library(ggplot2) 
library(reshape2) 

Bank01MWtest<-data.frame(X=sample(c(1,1,2,2)), 
        variable=sample(c("MW01A","MW01A","MW01B","MW01B")), 
        value=sample(c(576,571,584,580))) 

### Note above I modified your category labels by getting rid of the "-" sign 
### so that they can be used as variable names below. 

dat = dcast(Bank01MWtest, X~variable) 

ggplot(data=dat, aes(x=X)) + 
    geom_ribbon(aes(ymin=0, ymax=MW01A, fill="MW01A")) + 
    geom_ribbon(aes(ymin=0, ymax=MW01B, fill="MW01B")) + 
    scale_fill_manual("", values=c("green", "blue")) + 
    coord_cartesian(ylim=c(570,590)) 
+0

これは完璧です、ありがとうございます。 geom_areaを使用してプロットを取得するように固定されていたので、geom_ribbonを使用するようにデータを変換することについて考えることさえできませんでした。 geom_areaがうまくいかない理由はまだ分かりません。上記のように変数を反転しても、色は切り替わりますが、まだ両方のセットを見ることはできません。 – BenO

1

いくつかの合成的に生成Bank01MWtestデータセットで、geom_areaでこれを試してみてください:

head(Bank01MWtest) 
    Time variable value 
1 2016-07-01 MW-01A 582.5482 
2 2016-07-02 MW-01A 580.5652 
3 2016-07-03 MW-01A 582.3305 
4 2016-07-04 MW-01A 583.3122 
5 2016-07-05 MW-01A 576.3432 
6 2016-07-06 MW-01A 584.4086 

tail(Bank01MWtest) 
     Time variable value 
195 2016-10-03 MW-01B 573.8355 
196 2016-10-04 MW-01B 575.3218 
197 2016-10-05 MW-01B 570.8007 
198 2016-10-06 MW-01B 572.3415 
199 2016-10-07 MW-01B 575.3291 
200 2016-10-08 MW-01B 578.0055 

ggplot(data=Bank01MWtest, aes(x=Time, y=value,group=variable))+ 
    geom_area(position='identity', aes(fill=variable), alpha=0.2)+ 
    scale_x_date(date_breaks= "1 month", date_minor_breaks = "15 days", date_labels = "%b", 
       limits = c(min(Bank01MWtest$Time),max(Bank01MWtest$Time))) + 
    geom_line(aes(color=variable))+coord_cartesian(ylim=c(570,590)) 

enter image description here

関連する問題