使用ggplot将图例添加到双图中

时间:2017-11-03 13:03:36

标签: r ggplot2 legend

我正在尝试使用R中的ggplot为我的情节添加一个图例到目前为止一切正常。我的情况很特别,因为我试图处理三个变量,但不是为了绘制3D图,而是绘制面向v1与v2和v1与v3的2D图。

我以正确的方式得到我的情节,但我没有得到传说。

这是我的代码:

colfuncWarmest <- colorRampPalette(c("orange","red"))
colfuncColdest <- colorRampPalette(c("green","blue"))

plot <- ggplot(data=temperatures_Celsius, aes(x=temperatures_Celsius$Year))
params <- labs(title=paste("Year vs. (Warmest minimum temperature\n",
                      "and Coldest minimum temperature)"),
               x="Year",
               y="Coldest min temp / Warmest min temp")
theme <- theme(plot.title = element_text(hjust = 0.5)) #Centering title
wmtl<-geom_line(data=temperatures_Celsius,
                aes(y=temperatures_Celsius$Warmest.Minimum.Temperature..C.,
                    color="red"
                ),
                colour=colfuncWarmest(length(temperatures_Celsius$Year))
              )
wmtt<-stat_smooth(data=temperatures_Celsius,
                  aes(y=temperatures_Celsius$Warmest.Minimum.Temperature..C.),
                  color="green",
                  method = "loess")

cmtl<- geom_line(data=temperatures_Celsius,
                 aes(y=temperatures_Celsius$Coldest.Minimum.Temperature..C.,
                     color="blue"
                  ),
                 colour=colfuncColdest(length(temperatures_Celsius$Year))
                )
cmtt<-stat_smooth(data=temperatures_Celsius,
                  aes(y=temperatures_Celsius$Coldest.Minimum.Temperature..C.),
                  color="orange",
                  method = "loess")


plot + theme + params + wmtl +  wmtt  +  cmtl +  cmtt

(并非所有代码都被添加,因为我做了很多更改。只是为了得到一个想法)我明白了:

plot

如果我添加

+ scale_color_manual(values=c("red","blue"))

(例如)为了添加图例,我没有得到任何错误,但没有任何不同的事情发生。我得到了相同的情节。

我想要的只有两行。红色的一个表示“最温暖的最小”,另一个蓝色表示“最冷的最小”。我怎样才能以这种方式获得我的传奇?

提前致谢。

1 个答案:

答案 0 :(得分:2)

通常我会说将图例应用到ggplot的正确方法是将变量映射到美学(例如填充,颜色,大小,alpha)。通常,这包括将数据转换为长格式(键值对)并将键变量映射到颜色或其他aestetic。

在目前的情况下,这是不可取的,因为接下来没有机会可以实现线上的颜色梯度(colorRampPalette)。所以我建议采用一种虚假的方式,使用虚拟图层(图中不会看到的图层)来创建图例。

以下是一些数据

temperatures_Celsius = data.frame(year = 1900:2000,
                        Warmest = rnorm(100, mean = 20, sd = 5),
                        Coldest = rnorm(100, mean = 10, sd = 5))

你的情节:

colfuncWarmest <- colorRampPalette(c("orange","red"))
colfuncColdest <- colorRampPalette(c("green","blue"))


plot <- ggplot(data=temperatures_Celsius, aes(x=year))
params <- labs(title=paste("Year vs. (Warmest minimum temperature\n",
                           "and Coldest minimum temperature)"),
               x="Year",
               y="Coldest min temp / Warmest min temp")
theme <- theme(plot.title = element_text(hjust = 0.5)) #Centering title

wmtl<-geom_line(data=temperatures_Celsius,
                aes(y=Warmest),
                colour=colfuncWarmest(length(temperatures_Celsius$year)))

wmtt<-stat_smooth(data=temperatures_Celsius,
                  aes(y=Warmest),
                  color="green",
                  method = "loess")

cmtl<- geom_line(data=temperatures_Celsius,
                 aes(y=Coldest),
                 colour=colfuncColdest(length(temperatures_Celsius$year)))

cmtt<-stat_smooth(data=temperatures_Celsius,
                  aes(y=Coldest),
                  color="orange",
                  method = "loess")

plot1 <- plot + theme + params + wmtl +  wmtt  +  cmtl +  cmtt

现在添加一个虚拟层:

plot1+
geom_line(data = data.frame(year = c(1900, 1900),
                   group = factor(c("Coldest", "Warmest"), levels = c("Warmest", "Coldest")),
                   value = c(10, 20)), aes(x=year, y = value, color = group), size = 2)+
  scale_color_manual(values=c("red","blue"))

enter image description here