簡體   English   中英

ggplot2 中分組箱線圖的默認間距:如何得出正確的 position_dodge 寬度以排列幾何圖形?

[英]Default spacing of grouped boxplots in ggplot2: how to derive correct position_dodge width to line up geoms?

這可能是一個騙局,但我還沒有在這里找到我需要的確切解決方案。 出於教學目的,我需要更多的答案:我制作了一個看起來像我想要的方式的 plot,但我想向 ggplot 初學者解釋它的工作原理。 問題是,為什么position_dodge(width = 0.75)參數使stat_summary中的點與分組箱線圖對齊? 我通過反復試驗找到了這個數字,但我找不到導致 0.75 寬度“正確”的默認間距值。 這個值在哪里找到?

代表

set.seed(1)
g1mean <- rep(1:4, times=10)
g2mean <- rep(1:4, each=10)
y <- rnorm(n = length(g1mean), mean = g1mean+g2mean, sd = 2)
dat <- data.frame(g1=factor(g1mean), g2=factor(g2mean), y=y)

library(ggplot2)

ggplot(dat, aes(x=g1, fill=g2, y=y)) +
  geom_boxplot() +
  stat_summary(fun = mean, geom = 'point', color = 'blue', position = position_dodge(width = 0.75))

結果

這看起來不錯,但是我如何以編程方式確定position_dodge的最佳寬度以使幾何圖形對齊?

在此處輸入圖像描述

首先,實際上看起來您的點與每個框的中心並沒有完全對齊...... width=應該只是大約 0.84 以使其完美。

但這並不是您問題的真正答案。 您的問題的答案是要意識到實際上, position=position_dodge()也應用於geom_boxplot調用。 ggplot2試圖變得智能,當你提供一個fill=美學來使用時, ggplot2意識到這意味着你想對箱線圖幾何圖形使用閃避。 默認情況下,不要期望所有幾何圖形都有這種行為,但箱線圖就是這種情況。

這里真正的答案是,為了使您的點在兩者之間對齊,您應該為兩者提供相同的position=值。 您甚至可以在ggplot調用之外指定它:

pos <- position_dodge(width=0.9)

ggplot(dat, aes(x=g1, fill=g2, y=y)) +
  geom_boxplot(position=pos) +
  stat_summary(fun = mean, geom = 'point', color = 'blue', position = pos)

在此處輸入圖像描述

那么...為什么默認的閃避寬度在 0.85 或 0.84 左右? 打敗我。 一定要從某個地方開始嗎? 更重要的是知道如何控制它。 您將需要更好的控制,特別是如果您開始使用width=定義箱線圖的寬度。 dodge width = geom width 會給你閃避,使盒子完全相互接觸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM