ggplot指定分类x轴垂直线段的位置

3
我正在绘制行数据,我添加了一段可信区间的线段和一个黑色点来表示统计计算的拟合值。
我的问题是,我希望这些线(和黑色点)在水平方向上略微移动,与行数据相比。
我尝试使用抖动和所有可能的组合,结果非常糟糕,因为我从不同的列中获取y的起始值和结束值...因此使用抖动后,这些线不再是水平的。
我试图添加一个固定值到x(pb_values),但是它给了我一个错误,因为我的x是一个因子。
dat_stack1(我的数据集):
dat_stack1<-data.frame(pb_cluster= rep(3:5, 6))
dat_stack1$pb_cluster<-factor(dat_stack1$pb_cluster)
dat_stack1$total<-c(28,  12,   3, 326,  14, 125,  74,  40, 115, 382,  70,  36,  36,  23,  28,185,19,107)
dat_stack1$couple<-factor(c(1, 1,  1,  2,  2,  2,  5,  5,  5,  8,  8,  8,  9,  9,  9,  11, 11, 11))
dat_stack1$lower<-c(55, 0.1851138,  8.9413495, 55.5002200,  0.1851138,  8.9413495, 55.5002200,  0.1851138,  8.9413495, 55.5002200,  0.1851138,  8.9413495, 55.5002200,  0.1851138,  8.9413495, 55.5002200,  0.1851138,  8.9413495)
dat_stack1$upper<-c(225.47047,  68.04097, 114.92182, 225.47047,  68.04097, 114.92182, 225.47047,  68.04097, 114.92182, 225.47047,68.04097,114.92182, 225.47047,  68.04097, 114.92182, 225.47047,  68.04097, 114.92182)
dat_stack1$fit<-c(124.93260,  18.87026, 46.84022,124.93260, 18.87026,46.84022,124.93260, 18.87026, 46.84022, 124.93260, 18.87026,  46.84022,124.93260,  18.87026,  46.84022, 124.93260 ,18.87026 ,46.84022)


g<-g_stack<-ggplot(data=dat_stack1, aes(x=pb_cluster,  y = total, shape=couple))+
geom_point()+
scale_x_discrete(limits=c("3","4","5"),                                                                                        labels=c("mate", "familiar","unfamiliar"))+
theme(axis.text.x  = element_text(angle=90))+
geom_segment(aes(x=pb_cluster, xend=pb_cluster, y = lower, yend = upper))+
geom_point(aes(x=pb_cluster,  y = fit),color="black")

很不幸,我的声誉太低了,无法发布图片!但是现在的代码可以复制了。

有什么办法可以移动这些竖线吗?

我尝试过以下方法:

geom_segment(aes(x=pb_cluster, xend=pb_cluster,
             y = lower, yend = upper)+position="jitter")

并且

geom_segment(aes(x=pb_cluster +0.1, xend=pb_cluster+0.1, 
             y = lower, yend = upper))

所有可能的括号组合。

当然,我在网上寻找类似的图表,但没有找到——通常垂直线是直接从数据点计算而不是添加到来自不同列的行数据中!

1个回答

4
如果你的x值确实是因子,那么你可以在geom_segment()中的x值周围使用as.numeric(),并在最后一个geom_point()中添加一些小的常数,然后移动线条和点。
ggplot(data=dat_stack1, aes(x=pb_cluster,  y = total, shape=couple))+
      geom_point()+
      scale_x_discrete(limits=c("3","4","5"),labels=c("mate", "familiar","unfamiliar"))+
      theme(axis.text.x  = element_text(angle=90))+
      geom_segment(aes(x=as.numeric(pb_cluster)+.1, xend=as.numeric(pb_cluster)+.1,
                                                  y = lower, yend = upper))+
      geom_point(aes(x=as.numeric(pb_cluster)+0.1,  y = fit),color="black")

enter image description here


好的,谢谢。我之前尝试过使用numeric而不是as.numeric,但是出现了以下错误:Error in numeric(pb_cluster) : invalid 'length' argument - have fun
在数值图中绘制分类变量的绝佳解决方案。应该也可以在许多其他几何对象中使用这种方法。谢谢! - Alison Bennett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接