2016-05-13 11 views
1

私は適切に色付けしたい最小および最大温度データを持っています。gplot2でRの2行に1つのカラースケールを使用する

データは、これらの2行は別々の色のスペクトルを取得するが、私は両方のラインに使用したのと同じスペクトルをしたい、この

MESS_DATUM LUFTTEMPERATUR_MAXIMUM LUFTTEMPERATUR_MINIMUM 
20050719  22.1 16.5 
20050720  22.8 12.8 
20050721  22.6 12.0 
20050722  19.1 13.8 
20050723  21.9 12.8 
20050724  24.8 11.4 
20050725  25.8 16.9 
20050726  24.7 16.3 
20050727  31.6 17.0 
20050728  34.5 19.2 
20050729  27.3 18.2 
20050730  25.5 13.4 
20050731  24.5 11.5 
20050801  24.4 12.5 
20050802  22.1 14.6 
20050803  24.9 15.2 
20050804  23.4 11.3 
20050805  23.4  9.1 
20050806  21.0 12.0 
20050807  19.2  9.8 
20050808  19.2 10.8 
20050809  21.0 11.2 
20050810  20.2 10.2 

のように見えます。これは私がそのために使ったコードです。

p2<-ggplot(dataByYear) + 
geom_line(aes(x = MESS_DATUM,y = LUFTTEMPERATUR_MINIMUM, colour = LUFTTEMPERATUR_MINIMUM)) + 
geom_smooth(aes(x = MESS_DATUM,y = LUFTTEMPERATUR_MINIMUM), color = "blue",size = 0.5) + 
geom_line(aes(x = MESS_DATUM,y = LUFTTEMPERATUR_MAXIMUM, colour = LUFTTEMPERATUR_MINIMUM)) + 
geom_smooth(aes(x = MESS_DATUM,y = LUFTTEMPERATUR_MAXIMUM), color = "red",size = 1) + 
scale_colour_gradient2(low = "blue", mid = "green" , high = "red", midpoint = 10) + 
scale_y_continuous(limits = c(-10,40), breaks = seq(-10,40,5)) + 
ggtitle ("Daily average temperature") + 
xlab("Date") + ylab ("Average Temperature (ºC)") 

あなたは色が一定の温度のために固有のものではありません見ることができるようにそれは、この

enter image description here

のように見えます。下の行は赤で、15℃より大きい値が表示されますが、上の行と同じ温度では緑色のままです。

両方の行に均等に使用されるカラースケールが必要です。 誰かがそれをする方法を知っていますか?

ありがとうございます。

+0

これはちょうど野生の推測ですが、おそらく問題は、2つのgeom_lineコールを使用していることです。 'dataByYear'の構造は何ですか?データの形状を変更すると、1つのgeom_line呼び出しを使用できるようになります。 – zelite

+0

おそらく、私は2本の線が独立したデータであるため、可能であれば2本の線を維持したいと考えています。 –

+0

データをどのように再構築する必要があるか説明できますか? –

答えて

2

ようこそ!ここではすばやく回避策があります:溶融データにさらにgroupを使用してください。壊れた日付を気にしないで、私はそれを修正するために気にしなかった、あなたのデータフレームですべてが良いはずです。それでも、一般的なカラースケールを必要に応じて見ることができます。

ggplot(tidyr::gather(df, temp, value, -MESS_DATUM), 
     aes(x = MESS_DATUM, y = value, colour = value)) + 
    geom_line(aes(group = temp)) + 
    geom_smooth(data = df, aes(x = MESS_DATUM,y = LUFTTEMPERATUR_MINIMUM), color = "blue",size = 0.5) + 
    geom_smooth(data = df, aes(x = MESS_DATUM,y = LUFTTEMPERATUR_MAXIMUM), color = "red",size = 1) + 
    scale_colour_gradient2(low = "blue", mid = "green" , high = "red", midpoint = 10) + 
    scale_y_continuous(limits = c(-10,40), breaks = seq(-10,40,5)) + 
    ggtitle ("Daily average temperature") + 
    xlab("Date") + ylab ("Average Temperature (ºC)") 

enter image description here

+0

その関数のdocエントリを確認してください。良い例があります。 'df'はあなたのデータフレーム(' dataByYear')、 'temp'と' value'は変換された(長い)データフレームの列名です。 '-MESS_DATUM'は変換仕様(キーとして何を使用するか)です。 – tonytonov

+0

'tidyr'だけをインストールし、' df'を 'dataByYear'に置き換えてください。 – tonytonov

+0

まずは整地手帳をチェックしてから、何をすべきかを知りました。私は私の解決策で質問を更新しました。どうもありがとう! –

1

アップデート2時間後に...

[OK]を、私は何をする必要があるかが分かりました。

私の問題は、私のデータフレームに、tidyr.gather()によってマージされるべきではない列がさらに増えたことです。私はtidyr.gather()のドキュメントを読まなければなりませんでしたが、3つのカラムだけを持つ別々のデータフレームを作成する必要があることを理解しました。それから私はそれらをマージしてプロットで使うことができました。

私の解決策は、まず別のデータフレームを作成してから、plotコマンドで変数名を変更することでした。

#Prepare data frame for ggplot 
df <- 
data.frame(
    dataByYear$MESS_DATUM, 
    dataByYear$LUFTTEMPERATUR_MAXIMUM, 
    dataByYear$LUFTTEMPERATUR_MINIMUM 
) 

#Plot data 
#tidyr::gather creates Key/Values pairs temp/Temperatures which are used to 
#diplay the values equally colored 
p2 <- 
ggplot(
    tidyr::gather(df, temp, Temperature,-dataByYear.MESS_DATUM), 
    aes(x = dataByYear.MESS_DATUM, y = Temperature, colour = Temperature) 
) + 
geom_line(aes(group = temp)) + 
geom_smooth(
    data = df, 
    aes(x = dataByYear.MESS_DATUM, y = dataByYear.LUFTTEMPERATUR_MINIMUM), 
    color = "blue", 
    size = 0.5 
) + 
geom_smooth(
    data = df, 
    aes(x = dataByYear.MESS_DATUM, y = dataByYear.LUFTTEMPERATUR_MAXIMUM), 
    color = "red", 
    size = 1 
) + 
scale_colour_gradient2(
    low = "blue", 
    mid = "green" , 
    high = "red", 
    midpoint = 10 
) + 
scale_y_continuous(limits = c(-10, 40), breaks = seq(-10, 40, 5)) + 
ggtitle ("Daily average temperature") + 
xlab("Date") + ylab ("Average Temperature (ºC)") + 
scale_x_date(date_breaks = "1 month", date_labels = "%b") 

これが私の最終的な結果です。いい感じ。

enter image description here

関連する問題