如何在此示例图的右侧添加直方图或密度图来描述 y 值的分布?

rma*_*gno 3 r ggplot2

为了清楚起见,我正在寻找一种简单的方法来添加 90 度旋转的直方图或密度图,其 x 轴与下面给出的示例图的 y 轴对齐。

library(ggplot2)
library(tibble)

x <- seq(100)
y <- rnorm(100)

my_data <- tibble(x = x, y = y)
ggplot(data = my_data, mapping = aes(x = x, y = y)) +
  geom_line()
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.2.1)于 2019-01-28 创建

cam*_*lle 5

我会尝试使用 或geom_histogramgeom_densitypatchwork并动态设置限制以匹配绘图。

\n\n

无需手动设置限制,而是获取 y 值的范围,将其设置为scale_y_continuous或 中scale_x_continuous的适当限制,并使用 添加一些填充expand_scale。第一个图是线图,第二个和第三个是轴翻转的分布​​图。所有的尺度都设置为匹配。

\n\n\n\n
library(ggplot2)\nlibrary(tibble)\nlibrary(patchwork)\n\ny_range <- range(my_data$y)\n\np1 <- ggplot(data = my_data, mapping = aes(x = x, y = y)) +\n  geom_line() +\n  scale_y_continuous(limits = y_range, expand = expand_scale(mult = 0.1))\n\np2_hist <- ggplot(my_data, aes(x = y)) +\n  geom_histogram(binwidth = 0.2) +\n  coord_flip() +\n  scale_x_continuous(limits = y_range, expand = expand_scale(mult = 0.1))\n\np2_dens <- ggplot(my_data, aes(x = y)) +\n  geom_density() +\n  coord_flip() +\n  scale_x_continuous(limits = y_range, expand = expand_scale(mult = 0.1))\n
Run Code Online (Sandbox Code Playgroud)\n\n

patchwork允许您简单地相互添加绘图,然后添加plot_layout可以自定义布局的功能。

\n\n
p1 + p2_hist + plot_layout(nrow = 1)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
p1 + p2_dens + plot_layout(nrow = 1)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n

我通常看到这些类型的图,其中分布显示在“边缘”图 \xe2\x80\x94 中,即设置为主图(在本例中为线图)的次要图。该ggExtra包有一个边际图,但它似乎只在主图是散点图的情况下起作用。

\n\n

要手动执行此样式设置,我在将主题参数传递给plot_layout. 我从直方图中去掉了轴标记,使其左侧干净,并缩小了相交的两个图两侧的边距。在 中plot_layout,我缩放了宽度,以便直方图更多地出现在折线图的边缘中。密度图也可以做同样的事情。

\n\n
(p1 +\n    theme(plot.margin = margin(r = 0, unit = "pt"))\n) + \n  (p2_hist + \n     theme(axis.text.y = element_blank(), \n           axis.ticks.y = element_blank(),\n           axis.title.y = element_blank(),\n           plot.margin = margin(l = 0, unit = "pt"))\n   ) + \n  plot_layout(nrow = 1, widths = c(1, 0.2))\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n

由reprex 包(v0.2.1)于 2019-01-28 创建

\n