r - 有没有办法在 ggplot2 中手动设置水平箱线图的高度? (垂直闪避)

标签 r ggplot2 boxplot density-plot

我正在尝试制作一个图形,该图形在底部有密度图,在密度图上方有相应的箱线图。我的密度图和箱线图由分类变量填充/着色。我无法找到一种方法使箱线图高于密度图并且也被躲避。这是我到目前为止所能得到的:

d <- mtcars
d$cyl <- as.factor(d$cyl)

fig <- ggplot(data = d) + 
  geom_density(aes(x = mpg, fill = cyl),
               position = "dodge", 
               na.rm = TRUE) +
  geom_boxplot(aes(x = mpg, color = cyl), 
               position = ggstance::position_dodgev(height = 1),
               width = .05, show.legend = FALSE,
               na.rm = TRUE) + 
  facet_grid(~am, scales = "free_x") + 
  scale_fill_brewer(palette = "Set2") + 
  scale_color_brewer(palette = "Set2") +
  theme_minimal() + 
  guides(color = FALSE, fill = FALSE) 
fig

Test figure

但是,正如您所看到的,这并没有将箱线图统一移动到密度图上方。我也用过

geom_boxplot(aes(x = mpg, color = cyl), 
            position = position_nudge(x = 0, y = .3),
            width = .05, show.legend = FALSE,
            na.rm = TRUE) + 

但我最终让我的箱线图重叠(它们不再垂直躲避)。基本上,我正在寻找一种方法来为我的一组箱线图设置垂直高度,以便它们位于我的密度图之上,并使它们彼此垂直躲避。非常感谢任何建议。

最佳答案

将您希望框以 y 为中心的值映射到 geom_boxplotaes 内。例如:

ggplot(data = d) + 
  geom_density(aes(x = mpg, fill = cyl)) +
  geom_boxplot(aes(x = mpg, color = cyl, y = 1), 
               position = ggstance::position_dodgev(height = 0.2),
               width = .05, show.legend = FALSE) + 
  facet_grid(~am, scales = "free_x") + 
  scale_fill_brewer(palette = "Set2") + 
  scale_color_brewer(palette = "Set2") +
  theme_minimal() + 
  guides(color = FALSE, fill = FALSE) 

enter image description here

另外,不要试图躲避geom_密度

关于r - 有没有办法在 ggplot2 中手动设置水平箱线图的高度? (垂直闪避),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64431976/

相关文章:

r - 按字母顺序对数据表进行排序,然后按 R 中的数字值排序

r - 如何在图表的图例中获得正确的填充(或 Alpha)

r - 仅使用 x 轴上的列和 y 轴上的完整列中的某些行值创建绘图

r - 从字符串中提取数字以在 R 中将它们相除

javascript - Shiny 应用程序是否有 “Save Page As PDF”?

r - ggplot() 中偏导数的表达式是什么?

python:plt.pyplot.boxplot的默认设置?

python - 如何从 pandas 字符串列创建箱线图

python - 如何按中值对 pandas 中的箱线图进行排序?

r - R 中有没有标准库这样的东西?