R:改变重叠点的颜色
Posted
技术标签:
【中文标题】R:改变重叠点的颜色【英文标题】:R: Changing the Color of Overlapping Points 【发布时间】:2022-01-13 02:45:13 【问题描述】:我正在使用 R 编程语言。我制作了以下图表,显示了两种不同颜色的点之间的散点图:
library(ggplot2)
a = rnorm(10000,10,10)
b = rnorm(10000, 10, 10)
c = as.factor("red")
data_1 = data.frame(a,b,c)
a = rnorm(10000,7,5)
b = rnorm(10000, 7, 5)
c = as.factor("blue")
data_2 = data.frame(a,b,c)
final = rbind(data_1, data_2)
my_plot = ggplot(final, aes(x=a, y=b, col = c)) + geom_point() + theme(legend.position="top") + ggtitle("My Plot")
我的问题:有没有办法“改变重叠点的颜色”?
这是我目前尝试过的:
1)我发现了以下问题(Visualizing two or more data points where they overlap (ggplot R))并尝试了建议的策略:
linecolors <- c("#714C02", "#01587A", "#024E37")
fillcolors <- c("#9D6C06", "#077DAA", "#026D4E")
# partially transparent points by setting `alpha = 0.5`
ggplot(final, aes(a,b, colour = c, fill = c)) +
geom_point(alpha = 0.5) +
scale_color_manual(values=linecolors) +
scale_fill_manual(values=fillcolors) +
theme_bw()
这显示了两种不同的颜色以及重叠,但它很暗,仍然不清楚。有没有办法为此选择更好的颜色/分辨率?
2) 我找到了以下链接,它显示了如何为连续变量制作颜色渐变:https://drsimonj.svbtle.com/pretty-scatter-plots-with-ggplot2 - 但我有离散颜色,我不知道如何应用它
3) 我在这里发现了这个问题 (Any way to make plot points in scatterplot more transparent in R?),它显示了使用基本 R 图执行此操作,但不适用于 ggplot2:
addTrans <- function(color,trans)
# This function adds transparancy to a color.
# Define transparancy with an integer between 0 and 255
# 0 being fully transparant and 255 being fully visable
# Works with either color and trans a vector of equal length,
# or one of the two of length 1.
if (length(color)!=length(trans)&!any(c(length(color),length(trans))==1)) stop("Vector lengths not correct")
if (length(color)==1 & length(trans)>1) color <- rep(color,length(trans))
if (length(trans)==1 & length(color)>1) trans <- rep(trans,length(color))
num2hex <- function(x)
hex <- unlist(strsplit("0123456789ABCDEF",split=""))
return(paste(hex[(x-x%%16)/16+1],hex[x%%16+1],sep=""))
rgb <- rbind(col2rgb(color),trans)
res <- paste("#",apply(apply(rgb,2,num2hex),2,paste,collapse=""),sep="")
return(res)
cols <- sample(c("red","green","pink"),100,TRUE)
# Very transparant:
plot(final$a , final$b ,col=addTrans(cols,100),pch=16,cex=1)
但这也无法区分我拥有的两种颜色类别。
问题:有人可以建议如何解决重叠点的问题,以使重叠看起来更明显吗?
谢谢!
【问题讨论】:
这不是您要查找的内容,但绘制 x 轴和 y 轴的直方图/密度图以说明重叠是否有意义? @JAQuent:谢谢你的回复!过去我考虑过直方图 - 但是,我试图显示单个点希望通过直方图来做到这一点。我会继续寻找一种方法来做到这一点!谢谢! 听起来 ggpointdensity 包可能对您有用。它的绘图速度很慢,但可以产生很好的视觉效果。 github.com/LKremer/ggpointdensity 另外,请检查这个线程,我认为它有一些处理大量数据点的好主意***.com/questions/7714677/… 【参考方案1】:我会使用密度热图
ggplot(final, aes(x=a, y=b, col = c))+
stat_density_2d(aes(fill = stat(density)), geom = 'raster', contour = FALSE) +
scale_fill_viridis_c() +
coord_cartesian(expand = FALSE) +
geom_point(shape = '.', col = 'white')
或
ggplot(final, aes(x=a, y=b, col = c))+
stat_density_2d(aes(fill = stat(level)), geom = 'polygon') +
scale_fill_viridis_c(name = "density") +
geom_point(shape = '.')
或
ggplot(final, aes(x=a, y=b, col = c))+
geom_point(alpha = 0.1) +
geom_rug(alpha = 0.01)
【讨论】:
以上是关于R:改变重叠点的颜色的主要内容,如果未能解决你的问题,请参考以下文章