2016-07-31 55 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

非常感謝。 –