为了清楚起见,我正在寻找一种简单的方法来添加 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 创建
我会尝试使用 或geom_histogram库geom_density,patchwork并动态设置限制以匹配绘图。
无需手动设置限制,而是获取 y 值的范围,将其设置为scale_y_continuous或 中scale_x_continuous的适当限制,并使用 添加一些填充expand_scale。第一个图是线图,第二个和第三个是轴翻转的分布图。所有的尺度都设置为匹配。
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))\nRun Code Online (Sandbox Code Playgroud)\n\npatchwork允许您简单地相互添加绘图,然后添加plot_layout可以自定义布局的功能。
p1 + p2_hist + plot_layout(nrow = 1)\nRun Code Online (Sandbox Code Playgroud)\n\n
p1 + p2_dens + plot_layout(nrow = 1)\nRun Code Online (Sandbox Code Playgroud)\n\n
我通常看到这些类型的图,其中分布显示在“边缘”图 \xe2\x80\x94 中,即设置为主图(在本例中为线图)的次要图。该ggExtra包有一个边际图,但它似乎只在主图是散点图的情况下起作用。
要手动执行此样式设置,我在将主题参数传递给plot_layout. 我从直方图中去掉了轴标记,使其左侧干净,并缩小了相交的两个图两侧的边距。在 中plot_layout,我缩放了宽度,以便直方图更多地出现在折线图的边缘中。密度图也可以做同样的事情。
(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))\nRun Code Online (Sandbox Code Playgroud)\n\n
由reprex 包(v0.2.1)于 2019-01-28 创建
\n