(我在talkstats.com上的R论坛和ggplot2论坛上发布了同样的问题。)
在细胞生物学中,人们经常发布图像,其中一种蛋白质被标记为绿色,第二种蛋白质被标记为红色,然后它们仅显示绿色蛋白质的图像,然后仅显示红色蛋白质,然后是#34 ;合并"显示两种蛋白质存在的位置。合并最终显示绿色,其中只有蛋白质1,大部分是红色,只有蛋白质2,黄色,两者都是,你可以看到渐变,在恒定蛋白质1的背景中蛋白质2的水平增加,等等我想用ggplot做同样的事情,x和y轴显示两个测量的位置,颜色强度表示测量的大小。在所附示例中,测量1和2在大多数x和y坐标上是相似的,但是测量1从y轴50到100略高,而测量2从y轴75到125稍高。在我的示例中, graph1给了我我想要的东西(虽然是蓝色而不是红色),但后来我展示了一个不成功的" graph2"其中测量2简单地覆盖测量值1.
我希望通过附带的脚本,这个令人困惑的问题变得更加清晰。任何人都可以告诉我如何进行两种不同颜色的理想合并(理想情况下红色为1,绿色为另一种)? (对我创建数据框架的某种丑陋方式的任何建设性批评也会受到欢迎。)
感谢。
埃里克
enter code here
# merging two different colors with ggplot2 geom_point plot
library(tidyverse)
set.seed(8)
x <- seq(1,100)
y <- seq(1,250)
z <- integer(length(x) * length(y))
df <- data.frame('x_coordinate' = rep(x, times = length(y)),
'y_coordinate' = rep(y, each = length(x)),
'z_coordinate1' = z,
'z_coordinate2' = z)
df[,3] <- sample(1:100, length(df[,3]), replace = TRUE)
df[,4] <- sample(1:100, length(df[,3]), replace = TRUE)
for (i in 1:100) {
df[df[,1] == i & df[,2] > 50 & df[,2] <= 100,3] <- sample(25:125, 50)
df[df[,1] == i & df[,2] > 75 & df[,2] <= 125,4] <- sample(25:125, 50)
}
# graph 1:
ggplot(data = df,
mapping = aes(x = x_coordinate, y = y_coordinate, color = z_coordinate1)) +
geom_point(size = 0.2)
# unsuccessful graph2:
ggplot(data = df,
mapping = aes(x = x_coordinate, y = y_coordinate, color = z_coordinate1)) +
geom_point(size = 0.2) +
geom_point(data = df,
mapping = aes(x = x_coordinate, y = y_coordinate, color = z_coordinate2),
size = 0.2)
答案 0 :(得分:1)
Ggplot专为“长”或“整洁”的数据而设计。 (因此包装的'tidy'verse标题。你提供的DF是长格式的。 首先旋转DF,然后使用alpha美学来获得您正在寻找的颜色叠加。
df %>%
gather(key = CoordType, value = Intensity, z_coordinate1:z_coordinate2) %>% ## Pivot the 2 last columns into a single column, so each of the DF's row representes a single obeservation
ggplot(aes(x = x_coordinate, y = y_coordinate, colour = CoordType)) +
geom_point(aes(alpha = .$Intensity/max(.$Intensity)), ## Create a 1:0 value of transparency (alpha) as an aestethic for every point
size = 0.2) +
scale_color_manual(values = c("green", "red")) ## state the colours you want.