2017-05-07 81 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