使用ggplot2 geom_point图合并两种不同的颜色

时间:2018-02-16 22:51:30

标签: r ggplot2

(我在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)

1 个答案:

答案 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.

enter image description here