使用 position_jitterdodge 在分面图中子集点
subsetting points in a faceted plot using 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", 40), rep("third", 40), rep("whoops", 40)),4)
df <- data.frame(xval, yval, xfacet, yfacet, colorgroup)
df$yfacet <- factor(df$yfacet, levels = c("night", "day"))
如果我尝试在没有任何子集的情况下绘制这些数据,我所有的点都会按预期排列到那些抖动和闪避的 x 轴组中。请注意 ggplot 发出的警告,指出有 10 个缺失值 - 这些值从图中所有面板的最右下角缺失...... colorgroup 中的蓝色“哎呀”点=40=]oranges ~ day facet, in group b of the x-axis:
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),
aes(x=xval, y=yval, color=colorgroup),
position = position_jitterdodge(jitter.width = 0.1),
alpha = 0.1) +
geom_point(data = df %>% filter(yval <= 0.5),
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"))
感谢您的关心和帮助
试试这个方法。您可以根据 y
值来调节 alpha
参数以分配透明级别。在您的方法中,您使用过滤器。最好尽量把所有的美学元素都设置在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')
输出:
我想在 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", 40), rep("third", 40), rep("whoops", 40)),4)
df <- data.frame(xval, yval, xfacet, yfacet, colorgroup)
df$yfacet <- factor(df$yfacet, levels = c("night", "day"))
如果我尝试在没有任何子集的情况下绘制这些数据,我所有的点都会按预期排列到那些抖动和闪避的 x 轴组中。请注意 ggplot 发出的警告,指出有 10 个缺失值 - 这些值从图中所有面板的最右下角缺失...... colorgroup 中的蓝色“哎呀”点=40=]oranges ~ day facet, in group b of the x-axis:
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),
aes(x=xval, y=yval, color=colorgroup),
position = position_jitterdodge(jitter.width = 0.1),
alpha = 0.1) +
geom_point(data = df %>% filter(yval <= 0.5),
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"))
感谢您的关心和帮助
试试这个方法。您可以根据 y
值来调节 alpha
参数以分配透明级别。在您的方法中,您使用过滤器。最好尽量把所有的美学元素都设置在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')
输出: