【问题标题】:merging two different colors with ggplot2 geom_point plot用 ggplot2 geom_point plot 合并两种不同的颜色
【发布时间】:2018-02-16 22:51:29
【问题描述】:

(我在talkstats.com 上的R 论坛和ggplot2 论坛上发布了同样的问题。)

在细胞生物学中,人们经常发布图像,其中一种蛋白质标记为绿色,第二种蛋白质标记为红色,然后他们只显示绿色蛋白质的图像,然后只显示红色蛋白质,然后是“合并”显示两种蛋白质的存在位置。合并最终在只有蛋白质 1 的情况下显示大部分为绿色,在只有蛋白质 2 的情况下大部分显示为红色,在它们都在的情况下显示为黄色,并且您可以看到在恒定蛋白质 1 的背景中蛋白质 2 水平增加的梯度等. 我想用 ggplot 做同样的事情,x 和 y 轴显示两个测量的位置,颜色的强度表示测量的大小。在随附的示例中,测量值 1 和 2 在大多数 x 和 y 坐标上相似,但测量值 1 从 y 轴 50 到 100 稍高,而测量值 2 从 y 轴 75 到 125 稍高一些。在我的示例中, graph1 给了我我想要的东西(尽管是蓝色而不是红色),但随后我展示了一个不成功的“graph2”,其中测量 2 只是覆盖了测量 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)

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    Ggplot 专为“长”或“整洁”的数据而设计。 (因此包的“整洁”标题。您提供的 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.
    

    【讨论】:

    • 最终的图像并没有给我想要的效果。我认为挑战的一部分是通过改变透明度来合并绿色和红色并不会像在显微图像中合并绿色和红色荧光蛋白时那样产生漂亮的黄色。此外,通过基于“CoordType”将颜色分配给二进制红色或绿色,我失去了颜色强度的动态范围。
    • 我想知道我是否可以通过创建一种完全任意的“混合”颜色的方式来获得我想要的东西......例如,如果我将红色强度值分配为从 1 到 99 的步骤1 并以 100 的步长从 100 到 9,900 的绿色执行相同的操作,然后每次添加红色和绿色强度都会给出一个数字,该数字可以唯一地解卷积为一定量的红色与一定量的绿色混合,然后我可以在包含强度的红-黄-绿标度上任意将该数字分配给所需的颜色。
    • 嗯,你当然可以在 R 中选择源颜色。看这里,例如:sthda.com/english/wiki/…
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多