为由一个离散因子分组的ecdf图着色,以使用不同的(连续)因子连续着色?

时间:2020-10-10 16:26:02

标签: r ggplot2 colors ecdf

我正在尝试为每个主题(在此示例中为“ A”,“ B”或“ C”)制作具有不同颜色图的ecdf图(经验累积分布函数)。 在此示例中,X轴描述了RT(响应时间),Y轴描述了rt观测值的累积比例。 通过使用ggplot2和ecdf函数,我设法以不同的离散颜色为每个主题绘制了每个主题的ecdf图。当我想基于完全不同的变量(这里称为“ color_factor”)连续给对象的图连续着色时,问题就开始了。该变量对于每个对象都是不同的并且是连续的。

这是我的简化示例:

set.seed(125)
dat <- data.frame(
  subject = c(rep(c("A"), 10), rep(c("B"), 10), rep(c("C"), 10)),
  color_factor = c(rep(0.3, 10), rep(0.6,10), rep(0.9,10)),
  rt = sample(1:50, 30, replace =T)
)

dat <- arrange(dat,color_factor,rt)
dat.ecdf <- ddply(dat, .(color_factor), transform, ecdf=ecdf(rt)(rt) )
p <- ggplot( dat.ecdf, aes(rt, ecdf, colour = subject)) + geom_line()
p2 <- ggplot( dat.ecdf, aes(rt, ecdf, colour = color_factor)) + geom_line()

初始数据如下:

图p很好用,看起来像这样:

但是,当我尝试使用color_factor变量为绘图着色时,它只会为所有主题绘制一个绘图,而没有按预期方式为其着色。

我打算做的是该图将看起来与图p相似,但绘图颜色除外,例如将其着色为:主题A-浅蓝色,主题B-蓝色和主题C-深色。蓝色,对应于每个主题的color_factor变量。

任何人都知道我该怎么办?任何帮助将不胜感激!

非常感谢

Yuval

2 个答案:

答案 0 :(得分:0)

尝试以下任一选项:

library(plyr)
library(ggplot2)
#Data
set.seed(125)
dat <- data.frame(
  subject = c(rep(c("A"), 10), rep(c("B"), 10), rep(c("C"), 10)),
  color_factor = c(rep(0.3, 10), rep(0.6,10), rep(0.9,10)),
  rt = sample(1:50, 30, replace =T)
)
#Transform
dat <- arrange(dat,color_factor,rt)
dat.ecdf <- ddply(dat, .(color_factor), transform, ecdf=ecdf(rt)(rt) )
#Plot 1
ggplot( dat.ecdf, aes(rt, ecdf, colour = subject,group=1)) + geom_line()+
  scale_color_manual(values = c('lightblue','blue','darkblue'))

输出:

enter image description here

或者这个:

#Plot 2
ggplot( dat.ecdf, aes(rt, ecdf, colour = factor(color_factor),group=subject)) + geom_line()+
  scale_color_manual(values = c('lightblue','blue','darkblue'))+
  labs(color='Factor')

输出:

enter image description here

或者这个:

#Plot 3
ggplot( dat.ecdf, aes(rt, ecdf, colour = subject,group=subject)) + geom_line()+
  scale_color_manual(values = c('lightblue','blue','darkblue'))+
  labs(color='Subject')

输出:

enter image description here

答案 1 :(得分:0)

以下是@Lime提供的完全符合我想要的答案:

p <- ggplot( dat.ecdf, aes(rt, ecdf, group = subject, colour = color_factor)) + geom_line()

这将为每个主题的图上色以使其“ color_factor”值合适: