如何在一个ggplot2图中实现两个色标
How to implement two color scales in one ggplot2 graph
我正在尝试绘制 ggplot2 图表,但使用了两种不同的色标,一种是用户定义的,另一种是由我 data.frame.
中的单独列定义的
这在示例中更容易显示:
gene chr start end aceth acvitd disttss density fc color
1 MAP6D1 chr3 183527379 183528379 1.458988 2.190145 15514.0 0.06652449 1.501140 increased
2 MIR6729 chr1 12111873 12112873 1.581880 2.373651 23159.0 0.06244715 1.500525 increased
3 ATP6V0A4 chr7 138440797 138443072 1.517358 2.276540 41006.5 0.06244715 1.500331 increased
4 PRKCQ chr10 6560041 6562565 2.054282 3.081668 61305.0 0.01572513 1.500119 increased
5 UBE2L6 chr11 57327153 57329079 0.972952 1.458081 7687.0 0.12156697 1.498615 unchanged
6 FAM109B chr22 42469873 42471646 1.150138 1.723444 505.5 0.18451594 1.498468 unchanged
我可以使用这段代码绘制下图:
heatmap <- ggplot(acall, aes(aceth, acvitd,labels=gene, colour = density)) + scale_color_viridis()
heatmap + theme_bw(base_size = 14) # same theme as other graphs
heatmap <- heatmap + geom_point()
使用我的 data.frame.
中的渐变列为我的图形提供了一个很好的渐变填充
然而我想用不同颜色标记 fc 大于或小于截止值的基因,但在此渐变填充中保留不变的基因。
我可以做第一部分:
cols <- c("red" = "red", "unchanged" = "darkgrey", "increased" = "#00B2FF", "decreased" = "#00B2FF")
heatmap <- ggplot(acall, aes(aceth, acvitd,labels=gene, fill = color))
heatmap <- heatmap + scale_y_continuous(trans = "log") + scale_x_continuous(trans = "log")
heatmap <- heatmap + geom_point(size = 2.5, alpha = 1, na.rm = T, shape = 21, colour = "black")+
scale_fill_manual(values = cols)
这给了我一个很好的情节,其中 "increased" 和 "decreased" 基因是一种颜色,"unchanged" 是深灰色。以及我之前在 "color" 列中提到的特定基因的一些突出点。
我想做的是在 "color" 列中用渐变填充绘制 "unchanged" 基因(因此第二个图中的灰色点),其余的用我定义的颜色方案。
谢谢
由于您没有提供所有数据组合的示例,所以我以类似的结构编了一些。
library(dplyr)
df <- tibble(
gene = sample.int(5000),
aceth = rnorm(5000),
acvitd = rnorm(5000)
) %>%
mutate(
dens = dnorm(aceth) + dnorm(acvitd),
chg = ifelse(density < 0.4 & abs(acvitd) > 2, "changed", "unchanged"),
dir = ifelse(sign(acvitd) == 1, "increased", "decreased"),
dir = replace(dir, gene %in% sample.int(5000, 30), "special annotation")
)
ggplot() +
geom_point(data = filter(df, chg == "unchanged"),
aes(aceth, acvitd, color = dens)) +
geom_point(data = filter(df, chg == "changed"),
aes(aceth, acvitd, fill = dir),
shape = 22, size = 3) +
scale_fill_manual(values = c("grey70", "white", "red")) +
scale_color_viridis() +
theme_bw()
你可以改变美学来匹配你想要的,但这就是我实现那种情节的方式。
我正在尝试绘制 ggplot2 图表,但使用了两种不同的色标,一种是用户定义的,另一种是由我 data.frame.
中的单独列定义的这在示例中更容易显示:
gene chr start end aceth acvitd disttss density fc color
1 MAP6D1 chr3 183527379 183528379 1.458988 2.190145 15514.0 0.06652449 1.501140 increased
2 MIR6729 chr1 12111873 12112873 1.581880 2.373651 23159.0 0.06244715 1.500525 increased
3 ATP6V0A4 chr7 138440797 138443072 1.517358 2.276540 41006.5 0.06244715 1.500331 increased
4 PRKCQ chr10 6560041 6562565 2.054282 3.081668 61305.0 0.01572513 1.500119 increased
5 UBE2L6 chr11 57327153 57329079 0.972952 1.458081 7687.0 0.12156697 1.498615 unchanged
6 FAM109B chr22 42469873 42471646 1.150138 1.723444 505.5 0.18451594 1.498468 unchanged
我可以使用这段代码绘制下图:
heatmap <- ggplot(acall, aes(aceth, acvitd,labels=gene, colour = density)) + scale_color_viridis()
heatmap + theme_bw(base_size = 14) # same theme as other graphs
heatmap <- heatmap + geom_point()
使用我的 data.frame.
中的渐变列为我的图形提供了一个很好的渐变填充然而我想用不同颜色标记 fc 大于或小于截止值的基因,但在此渐变填充中保留不变的基因。
我可以做第一部分:
cols <- c("red" = "red", "unchanged" = "darkgrey", "increased" = "#00B2FF", "decreased" = "#00B2FF")
heatmap <- ggplot(acall, aes(aceth, acvitd,labels=gene, fill = color))
heatmap <- heatmap + scale_y_continuous(trans = "log") + scale_x_continuous(trans = "log")
heatmap <- heatmap + geom_point(size = 2.5, alpha = 1, na.rm = T, shape = 21, colour = "black")+
scale_fill_manual(values = cols)
这给了我一个很好的情节,其中 "increased" 和 "decreased" 基因是一种颜色,"unchanged" 是深灰色。以及我之前在 "color" 列中提到的特定基因的一些突出点。
我想做的是在 "color" 列中用渐变填充绘制 "unchanged" 基因(因此第二个图中的灰色点),其余的用我定义的颜色方案。
谢谢
由于您没有提供所有数据组合的示例,所以我以类似的结构编了一些。
library(dplyr)
df <- tibble(
gene = sample.int(5000),
aceth = rnorm(5000),
acvitd = rnorm(5000)
) %>%
mutate(
dens = dnorm(aceth) + dnorm(acvitd),
chg = ifelse(density < 0.4 & abs(acvitd) > 2, "changed", "unchanged"),
dir = ifelse(sign(acvitd) == 1, "increased", "decreased"),
dir = replace(dir, gene %in% sample.int(5000, 30), "special annotation")
)
ggplot() +
geom_point(data = filter(df, chg == "unchanged"),
aes(aceth, acvitd, color = dens)) +
geom_point(data = filter(df, chg == "changed"),
aes(aceth, acvitd, fill = dir),
shape = 22, size = 3) +
scale_fill_manual(values = c("grey70", "white", "red")) +
scale_color_viridis() +
theme_bw()
你可以改变美学来匹配你想要的,但这就是我实现那种情节的方式。