你好,我想用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))
答案 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()
或者如果您想实际模拟像素:
ggplot(df, aes(x, y, fill = rgb)) + geom_tile() + scale_fill_identity()
由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()
我从代码中删除了熔体,因此更容易查看数据,并且对变量进行了略微筛选,以便您可以同时看到两者。