问题描述
我想加入传奇人物(“ Curva derarefação”)和丝带传奇人物(“Desvio-padrão”)。
hh <- data.frame(rr = sp5$richness,rc = sp1$richness,p = sp5$individuals,sd = sp5$sd)
ggplot(hh)+
geom_line(aes(x = p,y = rr,color = "rr")) +
geom_ribbon(aes(x = p,ymin = rr-sd*2,ymax = rr+sd*2,fill = "sd"),alpha = 0.2)+
geom_line(aes(x = p,y = rc,color = "rc")) +
theme_minimal()+
scale_colour_manual("",breaks = c("rr","rc"),labels = c("Curva de rarefação","Curva do coletor"),values = c("black","red")) +
scale_fill_manual("",breaks = "sd",labels = "Desvio-padrão",values = "grey") +
xlab("\nIndivíduos")+
ylab("Riqueza\n")
解决方法
这真是个hack。不确定是否有更简单的方法来获得所需的结果,但至少它能起作用。 (实际上,我希望您想要我在评论(;)中提供的第一个简便方法。
首先。几何图形没有任何传说,传说显示的是美学的尺度,即不同的fill
,color
,linetype
,...
因此,要获得理想的结果,第一步是对“黑色” geom_line
和geom_ribbon
使用相同的美学效果,但将 代表“红色” geom_line
的美观。
-
因此,我在
color
和fill
中使用geom_line
和geom_ribbon
aes,而对于第二个geom_line
,我使用{{1 }}。这样,我们为“黑线”和“色带”获得了一个图例(实际上我们得到了两个),为“红线”获得了一个图例。 -
要合并颜色和填充图例,我们必须为两个图例设置相同的名称,这是通过
linetype
进行的,这使我摆脱了图例标题。 -
接下来,我们通过scale_xxx_manual设置颜色和填充颜色以及标签。
-
完成这些步骤之后,我们几乎到了,除了黑线
labs(fill = NULL,color = NULL,linetype = NULL)
周围的黑色边框。这确实是棘手的部分,但是通过反复试验,我发现可以通过将legend key
的{{1}}设置为key_glyph
来实现。 -
最后,我更改了图例的顺序,以便首先显示“双”图例。
使用一些随机示例数据进行验证:
geom_ribbon
编辑我想到的第二种方法是这样的。在这里,我首先将您的数据帧转换为长格式,这样一个"rect"
就足以绘制两条线。但是,在这种情况下,我们还会为红线显示一个功能区。因此,我将第二个功能区的填充颜色设置为library(ggplot2)
set.seed(42)
hh <- data.frame(rr = (1:10) + runif(10),rc = (1:10) + runif(10),p = 1:10,sd = runif(10))
labels <- c(rr = "Curva de rarefacao",sd = "Desvio-padrao")
values_fill <- c(rr = "transparent",sd = "grey")
values_color <- c(rr = "black",sd = "transparent")
ggplot(hh)+
geom_line(aes(x = p,y = rr,color = "rr",fill = "rr")) +
geom_ribbon(aes(x = p,ymin = rr-sd*2,ymax = rr+sd*2,color = "sd",fill = "sd"),alpha = .2,key_glyph = "rect") +
geom_line(aes(x = p,y = rc,linetype = "rc"),color = "red") +
scale_fill_manual(labels = labels,values = values_fill) +
scale_colour_manual(labels = labels,values = values_color) +
scale_linetype_discrete(labels = c(rc = "Curva do coletor")) +
guides(linetype = guide_legend(order = 2),fill = guide_legend(order = 1),color = guide_legend(order = 1)) +
labs(fill = NULL,linetype = NULL) +
theme_minimal()
#> Warning: Ignoring unknown aesthetics: fill
,使其不可见。
geom_line