[英]Using one color scale for two lines in R with ggplot2
我有最小和最高溫度數據,我想要正確着色。
數據看起來像這樣
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 )")
看起來像這樣
正如您所看到的,顏色在某個溫度下並不是唯一的。 底線的紅色可以是15°C以上的紅色,但在頂線的相同溫度下仍然是綠色。
我想要一個同樣用於兩條線的色標。 有人知道怎么做嗎?
提前致謝。
歡迎來到SO! 這是一個快速解決方法:另外在熔化數據上使用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 )")
2小時后更新......
好的,我發現了我需要做的事情。
我的問題是我的數據框有更多的列,不應該由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")
現在,這是我的最終結果。 看起來不錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.