使用position_jitterdodge

问题描述

我想在ggplot中创建一个图形,该图形使用alpha参数强调点的子集。每个点代表五个变量的组合:

  • x轴变量
  • y轴变量
  • x面变量
  • y面变量
  • 颜色变量

由于许多点相互之间部分或完全重叠,因此我想使用position = position_jitterdodge自变量来抖动这些点,以(1)将值分成x轴变量内的组,(2)应用每个离散组的颜色。

当我尝试将alpha参数应用于这些点的子集时,就会出现问题。在尝试生成该图时,我的点不在它们各自的x轴位置内的那些组中对齐。发生这种情况是因为(在此示例中)这些组之一完全丢失了该子集中的数据。因此,对于一半的情节,该图会自动将剩余的点压缩得更近,而对于所有组都有一些数据要绘制的另一半,则不会。错误地,我实际上在沿x轴的分组点之间创建了两个不同的宽度。

我想强迫它停止这样做,并且非常感谢有人可以提供有关此操作的任何帮助。

这是我的问题的一个典型示例:

xval <- rep(c(rep("a",160),rep("b",160)),2)
yval <- c(runif(320,min = 0.51,max = 0.99),runif(310,min = 0.01,max = 0.49),rep(NA,10))
yfacet <- rep(c(rep("night",10),rep("day",10)),32)
xfacet <- rep(c(rep("apples",20),rep("oranges",20)),16)
colorgroup <- rep(c(rep("first",40),rep("second",rep("third",rep("whoops",40)),4)

df <- data.frame(xval,yval,xfacet,yfacet,colorgroup)
df$yfacet <- factor(df$yfacet,levels = c("night","day"))

如果我尝试不带任何子集地绘制这些数据,则所有点都按预期排列在那些抖动和闪避的x轴组中。请注意ggplot发出的警告,指示有10个缺失值-在图形中所有面板的最右下方都缺失了这些值。...橙色中的蓝色“ whoops” colorgroup 点〜天方面,在x轴的 b 组中:

ggplot() +
  geom_point(data = df,aes(x=xval,y=yval,color=colorgroup),position = position_jitterdodge(jitter.width = 0.1)) +
  facet_grid(xfacet ~ yfacet) +
  scale_color_manual(values = c("red","black","orange","blue"))

enter image description here

我的意图是采用相同的图,但仅对yval大于0.5的点使用alpha参数。这是我使用的参数,在同一右下角的面板中也产生了问题-请注意在 day〜oranges 方面,在x轴 b 组中,点不再排队?我想知道为解决此对齐问题可能要进行哪些更改:

ggplot() +
  geom_point(data = df %>% filter(yval > 0.5),position = position_jitterdodge(jitter.width = 0.1),alpha = 0.1) +
  geom_point(data = df %>% filter(yval <= 0.5),"blue"))

enter image description here

感谢您的考虑和帮助

解决方法

尝试这种方法。您可以根据alpha的值来设置y参数,以指定透明级别。在您的方法中,您将使用过滤器。最好尝试在ggplot2中设置所有美学元素,以避免诸如未对齐之类的问题。这里的代码:

library(ggplot2)
#Plot
ggplot() +
  geom_point(data = df,aes(x=xval,y=yval,color=colorgroup,alpha=ifelse(yval>0.5,0.5,1)),position = position_jitterdodge(jitter.width = 0.1)) +
  facet_grid(xfacet ~ yfacet) +
  scale_color_manual(values = c("red","black","orange","blue"))+
  scale_alpha(guide = 'none')

输出:

enter image description here