Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ggplot2为R中的两条线使用一个颜色比例_R_Ggplot2 - Fatal编程技术网

使用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手册,然后才知道该怎么做。我用我的答案更新了我的问题。非常感谢@马丁斯科尔茨把你的答案放在答案里可能比放在问题里更连贯。