r - ggplot2:如何在将条形图保持在相同位置的同时更改点图的位置
问题描述
我想用包含点、线和条的图来绘制 paried t 检验的结果,就像纸上的图(Bellmund 等人。在人类外侧内嗅皮质中映射序列结构。Elife,8.doi:10.7554 /eLife.45333)。
看剧情截图:
在我的实践中,很容易把geom_point
,geom_line
和geom_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)
解决方案
这个问题需要想法,这里有一个技巧。
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_line
和geom_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))
推荐阅读
- python - 如何在 Python 中将对象大小(10,2)的数组制作成二维浮点数组(10,2)
- c++ - 从函数参数中推导 C++ 函数模板类型失败
- html - css 选择器如何重用于多个 html 页面?
- swift - 尝试使用 Firebase 重新验证用户时出错
- r - diff time r studio 没有正确给出结果
- python - 'value' 必须是单个 Unicode 代码点
- c# - 如何在 ASP.NET 项目中为 project.assets.json 中的依赖项强制执行最低版本?
- time-complexity - 使用 if/else 的 for 循环的时间复杂度
- snowflake-cloud-data-platform - 如何审核 Snowflake 中的常见用户 ID 使用情况?
- docker - 添加 Jenkins 管道执行的 conda-forge “conda/miniconda3” docker 映像时出现权限错误