2017-05-07 56 views
2

我想繪製兩種不同的設定與GGPLOT2點的區域,但我總是得到兩個不同的傳說。我讀過thisthis,但我仍然有兩個傳說。 下面的代碼和圖表。
非常感謝您GGPLOT2:合併兩個傳說

library(ggplot2) 
library(dplyr) 
set.seed(1) 
df <- data.frame(x = letters, 
       y = 1:26 +runif(26), 
       z = 2*(1:26) + runif(26), 
       jj = 1:26, 
       hh = 1:26*2, 
       x1 = 1:26) 

some_names <- df %>% 
    filter(row_number() %% 10 == 1) %>% 
    select(x,x1) 

p <- df %>% 
    ggplot(aes(x1)) + 
    geom_ribbon(aes(ymin = y, ymax = z, fill = "area")) + 
    geom_point(aes(y = jj, colour = "points1")) + 
    geom_point(aes(y = hh, colour = "points2")) + 
    scale_x_continuous(breaks = some_names %>% select(x1) %>% unlist %>% unname, 
        labels = some_names %>% select(x) %>% unlist %>% unname) 

p + scale_fill_manual(name = "legend", 
         values = c("area" = "red","points1" = NA,"points2" = NA)) + 
    scale_colour_manual(name = "legend", 
         values = c("area" = NA ,"points1" = "blue","points2" = "purple")) 

enter image description here

回答

1

你可以做的東西脈的

library(tidyverse) 
packageVersion("ggplot2") 
# [1] ‘2.2.1’ 
df %>% 
    gather(var, val, jj, hh) %>% 
    ggplot(aes(x1, val, ymin=y, ymax=z, color=var, fill=var)) + 
    geom_ribbon(color=NA) + 
    geom_point() + 
    scale_color_manual(values=c("blue","purple"), name="leg", labels = c("lab1","lab2")) + 
    scale_fill_manual(values = rep("red", 2), name="leg", labels= c("lab1","lab2")) 

enter image description here

library(tidyverse) 
df %>% 
    gather(var, val, jj, hh) %>% 
    bind_rows(data.frame(x=NA,y=NA,z=NA,x1=NA,var="_dummy",val=NA)) %>% 
    ggplot(aes(x1, val, ymin=y, ymax=z, color=var, fill=var)) + 
    geom_ribbon(color=NA) + 
    geom_ribbon(color=NA, fill="red") + 
    geom_point() + 
    scale_color_manual(
    values=c("#FFFFFF00", "blue","purple"), name="leg", labels = c("lab1","lab2","lab3")) + 
    scale_fill_manual(
    values = c("red", rep(NA, 2)), name="leg", labels= c("lab1","lab2","lab3")) 

enter image description here

+0

謝謝。我認爲我們很接近,但這個傳說與我的預期仍然不同。應該有三個要素:區域(紅色)和兩個局點的(lab1中的藍光Ë實驗2紫色) –

+0

@LucaMonno這似乎不是很ggplot'ish。通過像'DF%>% 聚集(VAR,纈氨酸,JJ,HH)%>% bind_rows(data.frame可能破解你的方式(X = NA,Y = NA,Z = NA,X1 = NA,VAR (顏色= NA)+ geom_ribbon (顏色= NA,填充= 「紅」)+ geom_point()+ scale_color_manual(值= C( 「#FFFFFF00」, 「藍」, 「紫色」),名稱= 「腿」,標籤= C(「lab1中的「 」實驗2「, 」Lab3的「))+ scale_fill_manual(值= C( 」紅「,代表(NA,2)),名稱= 」腿「,標籤= C( 」lab1中的「, 」實驗2「,」 lab3「))'。 – lukeA

+0

再次感謝您。 「not ggplot'ish」是什麼意思:我的數據集對於情節還是不夠整齊,或者我想要的情節不是ggplot'ish? –

1

一種選擇是對每個元素使用內部填充。可能有一種方法可以使用override.aes來獲取點數作爲圖例中的一個點,但我無法通過任何快速實驗獲得這些點。

p <- df %>% 
    ggplot(aes(x1)) + 
    geom_ribbon(aes(ymin = y, ymax = z, fill = "area")) + 
    geom_point(aes(y = jj, fill = "points1"), shape=21, colour="blue") + 
    geom_point(aes(y = hh, fill = "points2"), shape=21, colour="purple") + 
    scale_x_continuous(breaks = some_names %>% select(x1) %>% unlist %>% unname, 
        labels = some_names %>% select(x) %>% unlist %>% unname) + 
    scale_fill_manual(name = "legend", 
        values = c("area" = "red","points1" = "blue","points2" = "purple"), 
        guide = guide_legend(override.aes=aes(colour=NA))) 

p 

enter image description here