2016-01-29 51 views
2

有人可以向我解釋如何完全控制ggplot2中的圖例,其中兩個不同x尺度的數據框在兩個不同的幾何圖形中呈現。 'name1'和'name2'是使用其他過濾功能創建的功能。在ggplot2中有兩個不同x尺度和不同幾何數據框的圖例控制

This is the plot1。 爲什麼geom_point形狀出現在「組1」的圖例中?我希望圖例只會在Group1中顯示顏色,在Group2中顯示形狀。

是否有可能重新排列傳奇?即組2在該行中首先出現。

df1 <- data.frame(g1 = c("a", "b", "c", "e"), 
        y1 = c(12, 8, 3, 20)) 
df2 <- data.frame(g1 = letters[1:5], 
        y1 = 20:24) 
name1 <- "Group 1" 
name2 <- "Group 2" 

require(ggplot2) 
ggplot(NULL, aes(x=g1, y=y1)) + 
    geom_bar(data = df1, stat = "identity", 
      aes(fill=factor(name1))) + 
    geom_point(data = df2, stat = "identity", 
       size = 5, shape = 2, aes(fill=factor(name2))) + 
    theme(plot.margin = unit(c(2,1,1,1), "lines"), 
        plot.title = element_text(hjust = 0, size=18), 
        axis.title = element_text(face = "bold", size = 12), 
        legend.position = 'top', 
        legend.text = element_text(size = 12), 
        legend.title = element_blank()) 

回答

0

的關鍵是在兩個aes()定義fillshape。然後,您可以將shapefill定義爲NA作爲您不需要的那個。

ggplot(NULL, aes(x=g1, y=y1)) + 
    geom_bar(data = df1, stat = "identity", aes(fill=name2, shape=name2)) + 
    geom_point(data = df2, size = 5, aes(shape=name1, fill=name1)) + 
    theme(plot.margin = unit(c(2,1,1,1), "lines"), 
     plot.title = element_text(hjust = 0, size=18), 
     axis.title = element_text(face = "bold", size = 12), 
     legend.position = 'top', 
     legend.text = element_text(size = 12), 
     legend.title = element_blank()) + 
    scale_shape_manual(values=c(2, NA)) + 
    scale_fill_manual(values=c(NA, "red")) + 
    guides(fill = guide_legend(reverse = TRUE), 
     shape = guide_legend(reverse = TRUE)) 

enter image description here

相關問題