2016-09-17 86 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