r - 创建两条镜像密度曲线的 ggplot2 图,中间有一条线图(或:在 R 中重新创建漂移扩散模型图)
问题描述
[注:我用镜像这个词是松散的,我只是说一个密度曲线是倒置的]
问这个问题可能有更好的方法,但我想使用 ggplot2 重新创建这种标准类型的 DDM(漂移扩散模型)图:
我在下面开发的代码创建了两条密度曲线,但我无法弄清楚如何在两条曲线之间创建一个空间来绘制漂移(即沿着模拟扩散过程移动的点)。
pacman::p_load(ggplot2, rdists)
rt1 <- rdiffusion(500, a=1, v=2, t0=0.5)
ggplot() +
geom_density(data=subset(rt1, response=="upper"), aes(rt, fill="upper", y= ..count..)) +
geom_rug(data=subset(rt1, response=="upper"), aes(rt, fill="upper"), sides = "tr") +
geom_density(data=subset(rt1, response=="lower"), aes(rt, fill="lower", y= -..count..)) +
geom_rug(data=subset(rt1, response=="lower"), aes(rt, fill="lower")) +
scale_fill_hue("response")
这产生了这个数字:
解决方案
这是一个使用patchwork
.
虚拟数据:
library(tidyverse)
library(patchwork)
df <- tibble(
x = c(sort(runif(50)), sort(runif(50))),
y = c(cumsum(runif(50, -0.5)), cumsum(runif(50, -1.5))),
group = rep(c("A", "B"), each = 50)
)
创建 3 个图。
p_density_top <-
df %>%
filter(group == "A") %>%
ggplot(aes(x)) +
geom_density(fill = "purple") +
theme_minimal() +
theme(
axis.title = element_blank(),
axis.text = element_blank()
)
p_density_bottom <-
df %>%
filter(group == "B") %>%
ggplot(aes(x)) +
geom_density(fill = "red") +
scale_y_reverse() +
theme_minimal() +
theme(
axis.title.y = element_blank(),
axis.text.y = element_blank()
)
p_middle <-
ggplot(df, aes(x, y, col = group)) +
geom_line() +
scale_color_manual(values = c("purple", "red")) +
theme_minimal() +
theme(
axis.title.x = element_blank(),
axis.text.x = element_blank()
)
用于patchwork
将它们一起显示。
(p_density_top + p_middle + p_density_bottom) + plot_layout(ncol = 1, heights = c(1, 5, 1))
推荐阅读
- android - 在我的 android 应用程序中使用带有硬编码视频 ID 的 YoutubePlayer
- facebook-graph-api - Instagram Graph API - 结合使用 Business Discovery 和 Insights edge
- vhdl - 当他达到一定值时如何使计数器复位?
- javascript - 有效地覆盖特定元素的本机 appendChild
- python - Pandas 无法读取我的 csv 一个桌面,在笔记本电脑上工作正常
- python - 在函数中使用 numpy 数组中的数据
- api - WSO2 API 管理器从 2.0 迁移到 2.5
- c# - C# 如何创建更复杂的 .Any() 表达式
- xamarin - IsEnable 属性在 ListView 项目 xamarin 表单中不起作用
- ios - ReplayKit 错误:代码=-5807“录制因多任务处理和内容调整大小而中断”