【问题标题】:How to plot a boxplot with correctly spaced continuous x-axis values in ggplot2如何在ggplot2中绘制具有正确间隔的连续x轴值的箱线图
【发布时间】:2018-11-11 02:06:59
【问题描述】:

我正在尝试绘制一个箱线图,其中我的 x 轴是一个连续的时间尺度,它是生长度日,即 0 到 2500。我想获得一个 x 轴值在连续时间上正确间隔的箱线图 -规模而不是离散的。通常,如果它是常规时间/日期,我可以在 R 中使用带有 ggplot2 的“scale_x_date”。但是,由于数字超出了日期/时间范围,我不确定如何正确间隔 x 轴值。这是一个虚拟示例:

library(ggplot2)
set.seed(1234)
#get data    
df <- data.frame(y=abs(rnorm(8)),
             x=as.factor(rep(c(0,100,200,500),times=2))) 
ggplot(aes(y=y,x=x), data=df) + 
       geom_boxplot()

这给了我情节

我的 x 轴不是基于其数值间隔的。相反,我想得到一个箱线图,其中 200 到 500 之间的间距应该是 100-200 的三倍。我的实际数据的 x 轴值范围为 0-2500 生长期。我正在寻找 ggplot2 特定的解决方案。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:
    df <- data.frame(y=abs(rnorm(8)),
                     x=rep(c(0,100,200,500),times=2)) 
    
    ggplot(df, aes(x, y, group=x)) + 
      geom_boxplot()
    

    此解决方案依赖于两个更改。首先,要绘制位于连续 x 轴上的框,我们需要提供数字而不是因子 x 值。但是,这本身不起作用,因为没有按因子水平对 x 值进行分组,ggplot 不再知道如何将数据分组到不同的框中。所以,我们还需要提供一个额外的分组变量。

    【讨论】:

    • 这很好用。附带说明一下,我的实际数据具有更长的时间尺度(0 到 2500),在整个图中,它会将轴拉伸到使箱线图看起来几乎像细线的程度。我尝试通过将x 除以 100 将轴缩放到 '100 个单位。但它将 x 轴上较近的点合并为一个点。你有什么建议可以解决这个问题吗?
    • 您可以使用 width= 参数到 geom_boxplot。以 x 为单位设置宽度
    • 我认为可能值得指出的是,这里的重要步骤是将样本数据中的 x 变量从 categorical 更改为 Continuous 。
    • @Tjebotj - 谢谢,我在答案中添加了该信息。此外,它还需要额外的步骤。
    • 很抱歉重新打开一条旧链。我试图达到与这个问题类似的结果。我尝试使用 width= 参数。然而,这仍然导致一些箱线图比其他更靠近的箱线图更宽。你知道如何强制箱线图的宽度在整个图中保持一致吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多