问题描述
我想在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"))
我的意图是采用相同的图,但仅对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"))
感谢您的考虑和帮助
解决方法
尝试这种方法。您可以根据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')
输出: