首页 > 解决方案 > ggplot2:如何在将条形图保持在相同位置的同时更改点图的位置

问题描述

我想用包含点、线和条的图来绘制 paried t 检验的结果,就像纸上的图(Bellmund 等人。在人类外侧内嗅皮质中映射序列结构。Elife,8.doi:10.7554 /eLife.45333)。

看剧情截图:

看剧情截图

在我的实践中,很容易把geom_point,geom_linegeom_bar在同一个图中,但是当我尝试改变点和线的位置同时保持条形不变时,问题就出现了。

我尝试position_dodge()在点图中使用,但是,它会移动图中的所有元素。有任何想法吗?感谢帮助!

library(ggplot2)

id <- rep(c(1:29), times = 2)
condition <- c(rep('vector.angle', times = 29), rep('baseline', times = 29))
value <- rnorm(58, mean = 22, sd = 27)
v.angle.gg <- data.frame(id, condition, value)

ggplot(data = v.angle.gg, aes(x = condition, y = value)) +
  geom_hline(aes(yintercept = 0), color = "black", size = 1.5, linetype = 14) + 
  stat_summary(fun.y = mean, geom = "bar", aes(x = condition, y = value, fill = condition), 
               width = 0.3, position = position_identity()) + 
  geom_line(aes(group= id), size = 1, color = 'gray') + 
  geom_point(size = 4, position = position_dodge(width= 1)) +
  scale_fill_brewer(palette="Paired") +
  xlab('Conditions') + ylab('Parameter Estimations') +
  theme(
    title = element_text(size=rel(1.3),face="bold", colour = "black"), 
    axis.line.x = element_line(size = 1, colour = "black"),
    axis.text.x=element_text(size=rel(1.3),face="bold", colour = "black"),
    axis.ticks.x = element_line(size=rel(2), colour = "black"),
    axis.line.y = element_line(size = 1, colour = "black"),
    axis.text.y=element_text(size=rel(1.3),face="bold", colour = "black"),
    axis.ticks.y = element_line(size=rel(2), colour = "black"),
    panel.border = element_blank(),
    panel.background = element_blank(),
    panel.grid = element_blank()
  ) + 
  guides(fill=F,color=F) 

标签: rggplot2position

解决方案


这个问题需要想法,这里有一个技巧。

x在这种情况下,条形图以连续整数绘制条形图c(1, 2)。所以你需要在 处连接它们的点和线c(1.2, 1.8)。现在,在数据集列condition中首先具有按字母顺序较大的值,并且在绘图之前它们将被强制转换为因子。所以新的x坐标向量将是condition正确的子集。不清楚?

f <- v.angle.gg$condition
f <- c(1.2, 1.8)[as.integer(factor(f))]

这些是新坐标。并且它们必须同时设置在geom_linegeom_point中。现在更有意义了?但愿如此。
我已经简化了图表,以便只绘制相关部分。

ggplot(data = v.angle.gg, aes(x = condition, y = value)) +
  geom_hline(aes(yintercept = 0), color = "black", size = 1.5, linetype = 14) + 
  stat_summary(fun = mean, geom = "bar", aes(x = condition, y = value, fill = condition), 
               width = 0.3, position = position_identity()) + 
  geom_line(aes(x = f, group= id), size = 1, color = 'gray') + 
  geom_point(aes(x = f), size = 4, position = position_dodge(width= 1))

在此处输入图像描述


推荐阅读