使用ggplot2为R中的两条线使用一个颜色比例
我有最低和最高温度数据,我想正确着色 数据如下所示使用ggplot2为R中的两条线使用一个颜色比例,r,ggplot2,R,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
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 )")
p2欢迎来到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")
#为ggplot准备数据框
df这只是一个猜测,但问题可能是您使用了两个geom_line调用。您的databyear
的结构是什么?一些数据重组应该允许您使用一个geom_行调用。可能吧,但如果可能的话,我想保留这两行,因为它们是独立的数据。您能解释一下数据需要如何重组吗?检查该函数的文档条目,它有很好的示例df
是您的数据帧(databyear
),temp
和value
是转换(长)数据帧的列名-MESS_DATUM
是转换规范(即用作键的内容)。您可能只需要安装tidyr
并用databyear
替换df
。我必须先查看tidyr手册,然后才知道该怎么做。我用我的答案更新了我的问题。非常感谢@马丁斯科尔茨把你的答案放在答案里可能比放在问题里更连贯。