如何在ggplot中从一个数据框添加多个图层?

时间:2018-05-15 14:49:31

标签: r dataframe ggplot2

很抱歉,如果这是一个愚蠢的问题,我仍然是R的新人。

我正在努力从数据框的两个不同列添加多个图层。这是我的剧本:

b <- rnorm(500, mean=300, sd=60)
c <- rnorm(500, mean=350, sd=15)
id <- rep(1:50, each=10)
visit <- rep(1:10, 50)
df <- data.frame(id, visit, b, c)

我想在x轴上创建一个访问图,在y轴上创建b和c。

ggplot(df, aes(x=visit, y=b)) + 
  geom_jitter(color="blue") + 
  geom_jitter(y=c, color="red")

然而,这不起作用。我知道当我有两个不同的数据帧和相同的列名时,这确实有效。这是我向图表添加b和c的唯一方法吗?或者还有另一种方式吗?

2 个答案:

答案 0 :(得分:2)

从一个数据时隙添加多个图层的正确方法是在每个图层中指定aes

ggplot(df) + 
  geom_jitter(aes(x=visit, y=b), color="blue") + 
  geom_jitter(aes(x=visit, y=c), color="red")

enter image description here

对于您的具体示例,执行此操作的最tidy方法是执行@GGamba建议的操作,并创建一个将颜色作为分类变量的整洁数据框。

答案 1 :(得分:1)

如果您只有几个小组,则可以覆盖每个aes中的geom

library(ggplot2)

ggplot(df,aes(x=visit,y=b)) + 
  geom_jitter(color="blue") + 
  geom_jitter(aes(y=c), color="red")

但是如果你需要概括,那么方法就是拥有一个“整洁”的数据框:

library(tidyr)
df %>% 
  gather(key, value, -id, -visit) %>% 
  ggplot() +
  geom_jitter(aes(visit, value, color = key))

数据:

b <- rnorm(500,mean=300,sd=60)
c <- rnorm(500,mean=350,sd=15)
id <- rep(1:50,each=10)
visit <- rep(1:10,50)
df <- data.frame(id,visit,b,c)

reprex package(v0.2.0)创建于2018-05-15。