2012-10-30 29 views
2

如果我有以下数据,并使用ggplot2绘制它,我得到:更改复合图例标题

a <-c(0.3,0.3,0.3,0.3,0.3) 
b <-c(1:5,0.9,0.9,0.9,0.9,0.9) 
c <-c(1:5,0.5,0.5,0.5,0.5,0.5) 
z <-rep(1:5,5) 
df <- data.frame(y=c(a,b,c),x=c(z),line=c(rep("1",5), 
rep("2",5),rep("3",5),rep("2",5),rep("3",5))) 

library(ggplot2) 

a <- ggplot(df,aes(x=x,y=y,fill=line,shape=line,group=line)) +  
      geom_line(aes(linetype=line),size=1) +    
    scale_linetype_manual(values=c("dashed","solid", "dotdash")) + 
      geom_point(size=3) + scale_shape_manual(values=c(25,23,21,25,23)) +  
    scale_fill_manual(values=c("red", "blue", "yellow","red", "blue")) 

如果我想指定的传奇头衔,我可以做许多事情一样

a + labs(shape = "MY TITLE HERE") # or 

a <- ggplot(df,aes(x=x,y=y,fill=line,shape=line,group=line)) +  
      geom_line(aes(linetype=line),size=1) +    
    scale_linetype_manual(values=c("dashed","solid", "dotdash")) + 
      geom_point(size=3) + scale_shape_manual(values=c(25,23,21,25,23),name="MY 
      TITLE HERE") +  
    scale_fill_manual(values=c("red", "blue", "yellow","red", "blue")) 

enter image description here

然而,所有的这些选择打破了复合传说成其单独的映射paramters。

如何维护与linetypeshapefill的复合图例并更改图例标题?

回答

5

ggplot2具有相同标签的所有尺度将被组合在一起,所以你需要这样做:

  1. (可选)与您的标签创建一个变量,例如scale_label
  2. 将相同的标签作为第一个参数传递给每个比例。

例如:

scale_label <- "My custom title" 

a <- ggplot(df,aes(x=x,y=y,fill=line,shape=line,group=line)) +  
    geom_line(aes(linetype=line),size=1) +    
    scale_linetype_manual(scale_label, values=c("dashed","solid", "dotdash")) + 
    geom_point(size=3) + 
    scale_shape_manual(scale_label, values=c(25,23,21,25,23)) +  
    scale_fill_manual(scale_label, values=c("red", "blue", "yellow","red", "blue")) 
    #scale_shape("Title") 
print(a) 

enter image description here

+0

相当毕竟简单,非常感谢你@Andrie –