着色 ggplot2 的 stat_ecdf 基于行的样本分隔符
coloring ggplot2's stat_ecdf lines based sample delimiter
我有一个 data.frame 想要绘制 edcf 线。大约有 96 条 pos ecdf 线和 96 条 neg ecdf 线。我想将 pos 线涂成黑色,将 neg 线涂成红色。我还想添加一定程度的透明度或平均线,这样看起来就不会杂乱无章。并且可能只在图例中包含 pos 和 neg。
代码:
simplify <- function(x){
temp = x[complete.cases(x),]
df.m = reshape2::melt(temp, id.vars = NULL)
df.m$XIST = sapply(strsplit(as.character(df.m$variable), "_", fixed=TRUE), function(x) (x[1]))
return(df.m)
}
temp = simplify(X_chr)
ggplot(temp, aes(value, colour=variable)) + stat_ecdf() + xlim(1,1000) + theme_bw()
Temp
看起来像这样:
> head(temp, 10)
variable value XIST
1 pos_A1 0.00000 pos
2 pos_A1 0.00000 pos
3 pos_A1 0.00000 pos
4 pos_A1 0.00000 pos
5 pos_A1 0.00000 pos
6 pos_A1 15.66911 pos
7 pos_A1 0.00000 pos
8 pos_A1 0.00000 pos
9 pos_A1 0.00000 pos
10 pos_A1 0.00000 pos
> tail(temp, 10)
variable value XIST
210999 neg_H9 0.000000 neg
211000 neg_H9 0.000000 neg
211001 neg_H9 0.000000 neg
211002 neg_H9 0.000000 neg
211003 neg_H9 0.000000 neg
211004 neg_H9 4.466276 neg
211005 neg_H9 0.000000 neg
211006 neg_H9 0.000000 neg
211007 neg_H9 0.000000 neg
211008 neg_H9 30.033764 neg
产生:
下次请post一个reproducible example.
您只需使用 scale_color_manual
指定自定义图例。
df <- reshape2::melt(replicate(10,rnorm(100)^2))
df$Var2 <- paste0(c(rep("pos", 500),
rep("neg", 500)),
df$Var2)
ggplot(df, aes(x = value, colour=Var2)) + stat_ecdf() +
xlim(0,3) + theme_bw() +
scale_color_manual(label = stringr::str_sub(unique(df$Var2),1,3),
values = c(rep('red',5), rep("blue",5)))
如果你想要完整的变量名,只需将相关代码替换为
scale_color_manual(label = unique(df$Var2),
values = c(rep('red',5), rep("blue",5)))
关于你最后一个问题,你可以指定手动图例如下。我增加了 df 的大小,因为你会 运行 进入你在标题中用许多名字指定的问题。
df <- reshape2::melt(replicate(100,rnorm(100)^2))
df$Var2 <- paste0(c(rep("pos", 500),
rep("neg", 500)),
df$Var2)
ggplot(df, aes(x = value, group=Var2,
color = c(rep('red',5e3), rep("blue",5e3)))) +
stat_ecdf() +
xlim(0,3) + theme_bw() +
scale_colour_manual("+ or -",
values = c("red", "blue"),
labels = c("pos", "neg"))
我有一个 data.frame 想要绘制 edcf 线。大约有 96 条 pos ecdf 线和 96 条 neg ecdf 线。我想将 pos 线涂成黑色,将 neg 线涂成红色。我还想添加一定程度的透明度或平均线,这样看起来就不会杂乱无章。并且可能只在图例中包含 pos 和 neg。
代码:
simplify <- function(x){
temp = x[complete.cases(x),]
df.m = reshape2::melt(temp, id.vars = NULL)
df.m$XIST = sapply(strsplit(as.character(df.m$variable), "_", fixed=TRUE), function(x) (x[1]))
return(df.m)
}
temp = simplify(X_chr)
ggplot(temp, aes(value, colour=variable)) + stat_ecdf() + xlim(1,1000) + theme_bw()
Temp
看起来像这样:
> head(temp, 10)
variable value XIST
1 pos_A1 0.00000 pos
2 pos_A1 0.00000 pos
3 pos_A1 0.00000 pos
4 pos_A1 0.00000 pos
5 pos_A1 0.00000 pos
6 pos_A1 15.66911 pos
7 pos_A1 0.00000 pos
8 pos_A1 0.00000 pos
9 pos_A1 0.00000 pos
10 pos_A1 0.00000 pos
> tail(temp, 10)
variable value XIST
210999 neg_H9 0.000000 neg
211000 neg_H9 0.000000 neg
211001 neg_H9 0.000000 neg
211002 neg_H9 0.000000 neg
211003 neg_H9 0.000000 neg
211004 neg_H9 4.466276 neg
211005 neg_H9 0.000000 neg
211006 neg_H9 0.000000 neg
211007 neg_H9 0.000000 neg
211008 neg_H9 30.033764 neg
产生:
下次请post一个reproducible example.
您只需使用 scale_color_manual
指定自定义图例。
df <- reshape2::melt(replicate(10,rnorm(100)^2))
df$Var2 <- paste0(c(rep("pos", 500),
rep("neg", 500)),
df$Var2)
ggplot(df, aes(x = value, colour=Var2)) + stat_ecdf() +
xlim(0,3) + theme_bw() +
scale_color_manual(label = stringr::str_sub(unique(df$Var2),1,3),
values = c(rep('red',5), rep("blue",5)))
如果你想要完整的变量名,只需将相关代码替换为
scale_color_manual(label = unique(df$Var2),
values = c(rep('red',5), rep("blue",5)))
关于你最后一个问题,你可以指定手动图例如下。我增加了 df 的大小,因为你会 运行 进入你在标题中用许多名字指定的问题。
df <- reshape2::melt(replicate(100,rnorm(100)^2))
df$Var2 <- paste0(c(rep("pos", 500),
rep("neg", 500)),
df$Var2)
ggplot(df, aes(x = value, group=Var2,
color = c(rep('red',5e3), rep("blue",5e3)))) +
stat_ecdf() +
xlim(0,3) + theme_bw() +
scale_colour_manual("+ or -",
values = c("red", "blue"),
labels = c("pos", "neg"))