2016-07-31 32 views
0

我正在使用ggplot2版本2.1.0。以下是一场阴谋的截图,我创建:为什么图例中的形状与ggplot2中的图形中的形状不同?

enter image description here

以下是代码:

ggplot()+ 
    geom_point(data = BSX_SDX_5 %>% filter(CC1_BX1>0, sp_BX>1, 
             !(CC1_BX1 %in% c(Inf, -Inf)), 
             dV_BX>=-1 & dV_BX<=0, 
             BX1<=40) , 
      aes(y = dV_BX, x = BX1, shape = "Observed"), alpha=0.4)+ 
    geom_point(data = modi_CC1 %>% filter(CC1>0, sp_BX>1, 
             !(CC1 %in% c(Inf, -Inf)),dV<=0, 
             min_spacing<=76) , 
      aes(y = dV, x = min_spacing, shape = "SIMDATA1"), size=3)+ 
    geom_point(data = def_CC1 %>% filter(CC1>0, sp_BX>1, 
             !(CC1 %in% c(Inf, -Inf)),dV<=0, 
             min_spacing<=76) , 
      aes(y = dV, x = min_spacing, shape = "SIMDATA2"), size=3) + 
    scale_y_reverse()+ 
    scale_shape_manual(values = c(17, 0, 16))+ 
    theme_bw()+ 
    theme(axis.title.x = element_text(face="bold", size=20, vjust=0.5), 
     axis.title.y = element_text(face="bold", size=20, vjust=0.5), 
     axis.text = element_text(size=20), 
     legend.title=element_blank(), 
     legend.text = element_text(size = 15, face = "bold"), 
     strip.text.x = element_text(size = 20, face = "bold"), 
     legend.position = c(0.9,0.8), 
     legend.key.height = unit(1, "cm"), 
     legend.key.width = unit(1.5, "cm")) 

我没有共享的数据,因为它似乎这个问题并不关心数据。我如何确保图例中的形状与剧情中的形状正确对应?

+0

认为问题出在'legend.key.height'和'legend.key.width'主题元素上,请尝试删除它们,看看你如何去。 –

+0

@NicholasHamilton,我删除了整个'theme'部分并运行代码。情节是生成的,但仍然具有相同的形状问题。 –

+2

好吧,我想明白了,它是因为你指定了最后2个几何体的size = 3,而没有规定第一个。尝试设置相同大小的所有点几何,或完全删除大小参数。 –

回答

2

其因明确大小的规范三个GEOM层,第一没有任何可言,而第二和第三个具有尺寸为GEOM设置为3

这说明我的观点:

set.seed(1) 
n = 100 
shapes = c("Observed","SIMDATA1","SIMDATA2") 
df = data.frame(x=runif(n),y=runif(n),shape=sample(shapes,n,replace=T)) 
base = ggplot(df,aes(x,y,shape=shape)) + 
    scale_y_reverse()+ 
    scale_shape_manual(values = c(17, 0, 16))+ 
    theme_bw()+ 
    theme(axis.title.x = element_text(face="bold", size=20, vjust=0.5), 
     axis.title.y = element_text(face="bold", size=20, vjust=0.5), 
     axis.text = element_text(size=20), 
     legend.title=element_blank(), 
     legend.text = element_text(size = 15, face = "bold"), 
     strip.text.x = element_text(size = 20, face = "bold"), 
     legend.position = c(0.9,0.8), 
     legend.key.height = unit(1, "cm"), 
     legend.key.width = unit(1.5, "cm")) 

#BAD, AS PER YOUR PROBLEM 
base + 
    geom_point(data=df[1:(n/2),])+ 
    geom_point(data=df[(n/2):n,],size=3) 

#GOOD 
base + 
    geom_point(data=df[1:(n/2),])+ 
    geom_point(data=df[(n/2):n,]) 

#GOOD 
base + 
    geom_point(data=df[1:(n/2),],size=3)+ 
    geom_point(data=df[(n/2):n,],size=3) 

如果你想有不同的尺寸,你可以映射到大小可变,并使用scale_size_manual,像这样:

base = ggplot(df,aes(x,y,shape=shape,size=shape)) + 
    scale_y_reverse()+ 
    scale_shape_manual(values = c(17, 0, 16)) + 
    scale_size_manual(values = c(3,6,6)) + 
    theme_bw()+ 
    theme(axis.title.x = element_text(face="bold", size=20, vjust=0.5), 
     axis.title.y = element_text(face="bold", size=20, vjust=0.5), 
     axis.text = element_text(size=20), 
     legend.title=element_blank(), 
     legend.text = element_text(size = 15, face = "bold"), 
     strip.text.x = element_text(size = 20, face = "bold"), 
     legend.position = c(0.9,0.8), 
     legend.key.height = unit(1, "cm"), 
     legend.key.width = unit(1.5, "cm")) 

base + 
    geom_point(data=df[1:(n/2),])+ 
    geom_point(data=df[(n/2):n,]) 
+0

非常感谢。 –