r - 将 ggplot 的 facet_grid 与 bmrs conditional_effects 结合
问题描述
我有一个(玩具)数据集,每个受试者重复 10 次任务,他们必须猜测显示的两点之间的距离。在这个数据集中,我有外部评委(不是参与者自己)对每个科目的表现给出的评分。
library(tidyverse)
library(brms)
data <- data.frame(subject = rep(rep(c(1:10),5), 10),
judge = sort(rep(c(1:5), 100)),
distance = runif(500),
response = round(runif(500,1,6)))
我想画出每位评委如何根据距离对每个受试者在每次重复中的表现进行评分。我可以用 ggplot 的 facet_grid 很好地做到这一点
ggplot(data,aes(x=distance, y=jitter(response))) +
geom_point(alpha=0.5) +
geom_smooth(method=lm) +
facet_grid(judge~subject)
现在,评委的反应是有序的,我不想将它们建模为连续的。所以我在单个主题上运行 brms 序数模型
fit.oneSubj <- brm(data = data %>% filter(subject == 1) %>% filter(judge == 1),
response ~ distance,
family = cumulative("probit"),
chains = 1,
save_all_pars = TRUE)
我绘制它
conditional_effects(fit.oneSubj, spaghetti = TRUE, nsamples = 100) %>% #, categorical = TRUE gives you ordinal probability curves
plot(points = T, point_args = c(alpha = 1/3), line_args = c(size = 0),
theme = theme(panel.grid = element_blank()))
来自 conditional_effects 的情节也是一个 ggplot,所以应该可以将两者结合起来。但是怎么做?我尝试为每个主题生成一个后面的图,并将它们与拼凑在一起,但这并没有给我一个优雅的 facet_grid 包装,同时为所有图提供一个 x 和 y 标签。
解决方案
我最终通过在一个循环中分别创建所有图来做到这一点,确保 xlim 和 ylim 都是相同的,将它们保存到一个列表中,然后用ggarrange
and annotate_figure
(都来自ggpubr
)绘制它们。没有刻面标签它看起来不那么漂亮,但它已经足够好了!
推荐阅读
- tableau-api - 知道他如何在报告中添加边框吗?
- c++ - 向后迭代 std::array 或 std::vector 的正确方法是什么?
- css - 在 ioslides 幻灯片上排列 ggplot 输出图表
- database - Apache Ignite 查询失败
- javascript - 本网站需要在您的浏览器中启用 Javascript
- python - 存储最大子矩阵的坐标
- java - 如何将 JPanel 从另一个类添加到 BorderLayout 中的 JFrame?
- exception - 如何在 Camel 的 errorHandler 中设置类型为 DeadLetterChannel 的记录器名称?
- matlab - 改变神经网络中 Sigmoid 激活函数的斜率 - MATLAB
- html - 不能下载文件