我已经使用geom_segment创建了一个图,我想为不同的线色添加一个图例。我发现的唯一解决方案是建议修改aes()中的线型,但这仅适用于一个线段-当我在另一个geom_segment中添加第二个标签时,线型变为虚线,图例仅更改为新颜色。 >
这是剧情的代码:
library(ggplot2)
rib_x <- seq(1,10,0.5)
rib_ymin <- seq(3,12,0.5)
rib_ymax <- c(3.0,4.4,5.55,6.55,7.28,8.1,8.6,9.1,9.52,9.98,10.3,10.62,10.98,11.2,11.4,11.52,11.7,11.8,12)
ggplot(data.frame())+
geom_segment(aes(x=1, xend=10, y=12, yend=3),colour="dark red",size=1.5)+
geom_segment(aes(x=1, y=3,xend=10,yend=12),colour="green",size=1.5)+
stat_smooth(aes(x=rib_x,y=rib_ymax),se=FALSE,colour="dark green",size=1.5)+
xlab("Agroecological zone")+
ylab("Productivity")+
geom_segment(aes(x=0, xend = 0, y=2, yend=12), size=1.5, arrow=arrow(length=unit(0.6,"cm")))+
theme_bw()+
annotate("text", label="Arid", x=2, y=1)+
annotate("text", label="Semi-arid", x=5, y=1)+
annotate("text", label="Humid", x=8, y=1)+
theme(axis.title=element_text(size=14),axis.text=element_blank(),legend.title=element_blank(),
axis.ticks=element_blank(),panel.border=element_blank(),
panel.grid.major = element_blank(),panel.grid.minor = element_blank())
我想为三种线色添加一个图例,在这里我还可以指定图例中使用的文本。
非常感谢!
答案 0 :(得分:1)
在colour
内移动aes()
美学,并使用要用来标记每种颜色的实际字符串来命名它们。然后在末尾添加scale_colour_manual()
,以获得所需的特定颜色。请参见下面的示例。
在“标准” ggplot2工作流程中,您需要将一些分类列映射到colour
(例如,aes()
)内的ggplot(iris, aes(x=Petal.Width, y=Sepal.Width, colour=Species)) + geom_smooth(se=FALSE, method="lm")
,然后是几何体(例如,点,线,平滑等)对于映射到colour
的分类列的每个唯一值将以不同的颜色显示。在这里,我们没有使用数据框,因此我们创建了“虚拟”映射到色彩美学。将它们放在aes()
中会导致ggplot生成图例。
ggplot() +
geom_segment(aes(x=1, xend=10, y=12, yend=3, colour="name1"), size=1.5) +
geom_segment(aes(x=1, y=3,xend=10,yend=12, colour="name2"), size=1.5) +
stat_smooth(aes(x=rib_x,y=rib_ymax, colour="name3"),se=FALSE,size=1.5) +
labs(x="Agroecological zone", y="Productivity", colour="Type") +
geom_segment(aes(x=0, xend = 0, y=2, yend=12), size=1.5, arrow=arrow(length=unit(0.6,"cm"))) +
annotate("text", label="Arid", x=2, y=1) +
annotate("text", label="Semi-arid", x=5, y=1) +
annotate("text", label="Humid", x=8, y=1) +
theme_void() +
theme(axis.title=element_text(size=14, margin=margin(b=3)),
axis.title.y=element_text(angle=90)) +
scale_color_manual(values=c("name1"="darkred", "name2"="green", "name3"="darkgreen"))