2016-09-17 85 views
2

我有以下2个图块的情节。如何获得geom_segment显示图例

如何为线段添加图例?

理想地,最终的结果将具有2个图例:

  1. 其中之一是当前的“点传说”,因为它是
  2. 其他图例将是一个单个图例与红色虚线标记的“分段图例”

下面是代码

set.seed(11) 
x = rnorm(100) 

y = rnorm(100) 

dat = data.frame(x = x, y = y) 

ggplot(dat,aes(x=x,y=y)) + geom_point(aes(color="blue")) + 
    geom_segment(aes(x = -2, xend = 2, y = 0, yend = 2), color="red", linetype="dashed", size=1.2) + 
    geom_segment(aes(x = -1, xend = 1, y = -2, yend = -1), color="red", linetype="dashed", size=1.2) + 
    scale_color_manual(name = "",values = c("blue"),labels="point legend") 

enter image description here

回答

4
#Generate data 
x = rnorm(100) 
y = rnorm(100) 
dat = data.frame(x = x, y = y) 

#Create new variable with same value as desired legend label 
dat$cat<-rep('segment legend', 100) 
colnames(dat)<-c("x","y","segment legend") #change column name to legend label 

#Plot 
ggplot(dat,aes(x=x,y=y)) + geom_point(aes(color="blue")) + 
    geom_segment(aes(x = -2, xend = 2, y = 0, yend = 2, linetype=`segment legend`), 
    color="red", size=1.2) + #move linetype= to inside aesthetics 
    geom_segment(aes(x = -1, xend = 1, y = -2, yend = -1, linetype=`segment legend`), 
    color="red", size=1.2) + #move linetype= to inside aesthetics 
    scale_color_manual(name = "",values = c("blue"),labels="point legend")+ 
    scale_linetype_manual("segment legend",values=c("segment legend"=2))+ 
    theme(legend.title=element_blank()) 

enter image description here