我有一个ggplot2线图,有两行显着重叠.我正在尝试使用position_jitterdodge()它们以使它们更加明显,但我无法以相同的方式获得线条和指向两者的抖动.我试图只是水平抖动点和线(因为我不想在y轴上建议任何变化).这是一个MWE:
## Create data frames
dimension <- factor(c("A", "B", "C", "D"))
df <- data.frame("dimension" = rep(dimension, 2),
"value" = c(20, 21, 34, 32,
20, 21, 36, 29),
"Time" = c(rep("First", 4), rep("Second", 4)))
## Plot it
ggplot(data = df, aes(x = dimension, y = value,
shape = Time, linetype = Time, group = Time)) +
geom_line(position = position_jitterdodge(dodge.width = 0.45)) +
geom_point(position = position_jitterdodge(dodge.width = 0.45)) +
xlab("Dimension") + ylab("Value")
Run Code Online (Sandbox Code Playgroud)
哪个产生丑陋:
我显然在这里遇到了一些根本性的错误:我应该怎样做才能使geom_point抖动跟随geom_line抖动?
我已经根据这里的几个帖子尝试了几个建议,以及阅读ggplot2文档,但这个问题略有不同,我还没有找到解决方案.
下面是一段代码片段,用于制作与我正在使用的数据帧类似的融化数据帧:
a <- c(1,2,3,4,5,6,1,2,3,4,5,6)
b <- c("loss", "draw", "win", "draw", "loss", "win", "loss", "draw", "win", "draw", "loss", "win")
c <- c(2,3,5,4,4,5,4,4,3,5,2,4)
d <- c(rep("x", 6), rep("y", 6))
temp <- data.frame(a,b,c,d)
Run Code Online (Sandbox Code Playgroud)
我想要的是创建一个点图,其中x轴为b,y轴为c,x轴上的点按d分组,两者之间的线按a分组.如果我们首先将这些点放在图表上,就好了:
ggplot(temp, aes(x=b, y=c, fill=d, colour=d))+
geom_point(position=position_jitterdodge())
Run Code Online (Sandbox Code Playgroud)
这是我得到的点图,这是我想要的样子.这些点根据因子d进行颜色编码,而且它们被抖动到一侧,因此x在左边,y在右边.
现在,我想要的是根据因子a将点连接到线.这是我在MS Paint中制作的模拟版本.添加geom_line并将geom_line组设置为a应该工作...
ggplot(temp, aes(x=b, y=c, fill=d, colour=d))+
geom_point(position=position_jitterdodge())+
geom_line(aes(group=a),position=position_jitterdodge())
Run Code Online (Sandbox Code Playgroud)
......但它没有正确.它创建的线条是连接正确点的正确长度,但它们甚至几乎都没有触摸它们,看起来它们随机出现在图形上.我会添加另一个截图,但还没有权限.
而且,如果我将团体美学改变为整体美学,那么:
ggplot(temp, aes(x=b, y=c, fill=d, colour=d, aes(group=a)))+
geom_point(position=position_jitterdodge())+
geom_line(position=position_jitterdodge())
Run Code Online (Sandbox Code Playgroud)
...然后切换点,使他们处于错误的位置.并且在任何情况下,线仍然不完全与点连接.
我也尝试在position_jitterdodge()部分中指定width和jitter.width值,并且行和点仍然没有正确连接.我还阅读了ggplot2文档,几个以前的stackoverflow问题,并尝试了大多数的position_jitter,position_dodge,geom_jitter等组合,但到目前为止还没有运气.
任何帮助将不胜感激.
您好,我想问如何在多个组之间绘制与 ggplot 中的线连接的配对数据?一些要使用的示例数据:
set.seed(123)
sample <- data.frame(name = c(rep("Amy",4),rep("Bob",4),rep("Jack",4)),
status = rep(c("Before","After"),6),
test = rep(c("English","English","Math","Math"),3),
score = sample(60:100,12,replace=T))
sample %>% ggplot(aes(x=test,y=score,fill=status)) +
geom_boxplot() + geom_point(size = 2)
Run Code Online (Sandbox Code Playgroud)
test这个想法是在 x 轴和scorey 轴上设置,如下所示,但不是使用箱线图,而是geom_point()按组对个体进行分层status(因此组中的点after位于红色箱线图所在的空间中,并且组中的点before位于蓝色箱线图所在的空间中),并geom_line()连接来自同一组的配对数据点name。谢谢!
我有一个包含两个分类条件的数据集(条件 A 具有级别 A1 和 A2,条件 B 具有级别 B1 和 B2)。每个测量对象提供四个数据点,一个数据点对应两种条件的每种组合。
我已经绘制了各个数据点(添加了一些抖动),并希望连接每个主题在 A 的每个级别的两个点(因此将每个红点与示例图中属于同一主题的相邻绿松石点连接起来) 。我尝试过使用 geom_line(),但未能指定线连接 A 同一级别的点。可能有一些使用facet_grid() 而不是分组的解决方案,但由于这只是更复杂的绘图的一部分,我更喜欢有一个保持分组的解决方案。
d <- data.frame(id=as.factor(rep(1:100, each=4)),
A=rep(c("A1", "A1", "A2", "A2"), 100),
B=rep(c("B1", "B2", "B1", "B2"), 100),
y=runif(400))
ggplot(d, aes(x=A, y=y, col=B)) + geom_point(position=position_jitterdodge(.5))
Run Code Online (Sandbox Code Playgroud)