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:改变重叠点的颜色的主要内容,如果未能解决你的问题,请参考以下文章

MKPolyLine,检测线条何时重叠并相应改变颜色

arcgis10点的颜色和大小如何改变,

checkbox复选框和div click事件重叠,点击div后复选框也被选中,同时改变div颜色,否则则不选中

对于canvas画图时,改变其中一条线的颜色,该怎么解决

如何改变pcd中点的颜色?

不断地快速改变背景颜色