ggplot两种颜色的alpha的geom_point

时间:2020-08-02 20:32:52

标签: r ggplot2

你好,我想用ggplot覆盖在同一坐标处进行的不同测量的值。测量具有针对不同条件的X和Y坐标以及强度值。我希望强度值可以用不同的颜色绘制,并且都可以使用alpha看到。我尝试了alpha / color和fill参数的不同组合,但似乎找不到合适的组合。任何帮助将不胜感激

library(ggplot2)
library(reshape2)

#sample data
data <- data.frame(coordX = c(5, 10, 15, 20), coordY = c(5, 10, 20, 30), var1 = c(0.0, 0.02, 0.02, 0.02), var2 = c(0.34, 0.26, 0.31, 0.28))

library(reshape2)

#my best attempt so far
ggplot(data = melt(data, id.vars = c("coordX", "coordY"), value.name = "pixel.intensity"), aes(x = coordX, y = coordY)) + geom_point(aes(color= variable, fill = pixel.intensity, alpha =0.5))

2 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您希望在同一位置绘制两个不同组的两个点,但是两个组的颜色不同。每个点的alpha值将由第四个连续变量控制,以便每个绘制位置处的表观颜色将是两种颜色的混合,并根据第四个变量进行加权。

这种 kinda 可行,但由于多种原因,效果并不理想。

首先,您提供的数据太不平衡而无法支持第二组,因此这些点基本上都只会显示为蓝色。因此,我们需要pixel.intensity变量的不同值以显示效果确实有效:

library(ggplot2)

df <- structure(list(coordX = c(5, 10, 15, 20, 5, 10, 15, 20), coordY = c(5, 
10, 20, 30, 5, 10, 20, 30), variable = structure(c(1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L), .Label = c("var1", "var2"), class = "factor"), 
    pixel.intensity = c(0, 0.42, 0.51, 0.02, 0.34, 0.1, 0.15, 
    0.28)), row.names = c(NA, -8L), class = "data.frame")


ggplot(df, aes(x = coordX, y = coordY)) + 
  geom_point(aes(alpha = pixel.intensity, color = variable), size = 5) +
  scale_alpha_identity()

您可以看到,除了灰色的褪色外,其他各点的alpha值都需要很大的不同。另外,如果两个Alpha值都较低,则这些点将非常模糊。


编辑

根据OP的评论,很明显,我们实际上是在这里谈论混合RGB颜色。在这种情况下,假设我们有以下数据帧,红色,蓝色和绿色的强度在0到1之间缩放:

red   <- rep(c(seq(0, 1, 0.1), rep(1, 10)), 21)
green <- rep(c(rep(1, 10), seq(1, 0, -0.1)), 21)
blue  <- rev(rep(c(seq(0, 1, 0.1), rep(1, 10)), each = 21))
red   <- red * rev(blue)
green <- green * rev(blue)

x <- rep(0:20, 21)
y <- rep(0:20, each = 21)

df <- data.frame(x, y, red, blue, green)

然后我们可以通过简单地绘制rgb值;

df$rgb <- rgb(red, green, blue)

ggplot(df, aes(x, y, color = rgb)) + geom_point(size = 5) + scale_color_identity()

enter image description here

或者如果您想实际模拟像素:

ggplot(df, aes(x, y, fill = rgb)) + geom_tile() + scale_fill_identity()

enter image description here reprex package(v0.3.0)于2020-08-02创建

答案 1 :(得分:0)

有帮助吗?

#sample data
data <- data.frame(coordX = c(5, 10, 15, 20), coordY = c(5, 10, 20, 30), var1 = c(0.0, 0.02, 0.02, 0.02), var2 = c(0.34, 0.26, 0.31, 0.28))

library(reshape2)
data2 = melt(data, id.vars = c("coordX", "coordY"), value.name = "pixel.intensity")

ggplot(data2,
       aes(x = jitter(coordX), y = jitter(coordY), 
           alpha = pixel.intensity, color = variable, fill= variable)) + 
  geom_point() +
  theme_bw()

我从代码中删除了熔体,因此更容易查看数据,并且对变量进行了略微筛选,以便您可以同时看到两者。