gpt4 book ai didi

r - ggplot2 boxplot中位数未按预期绘制

转载 作者:行者123 更新时间:2023-12-04 07:36:49 25 4
gpt4 key购买 nike

因此,我有一个相当大的数据集(Dropbox: csv file),我正尝试使用geom_boxplot进行绘制。下面的结果似乎是一个合理的情节:

require(reshape2)
require(ggplot2)
require(scales)
require(grid)
require(gridExtra)

df <- read.csv("\\Downloads\\boxplot.csv", na.strings = "*")
df$year <- factor(df$year, levels = c(2010,2011,2012,2013,2014), labels = c(2010,2011,2012,2013,2014))

d <- ggplot(data = df, aes(x = year, y = value)) +
geom_boxplot(aes(fill = station)) +
facet_grid(station~.) +
scale_y_continuous(limits = c(0, 15)) +
theme(legend.position = "none"))
d

但是,当您进行更深入的研究时,问题就会蔓延至我。当我用它们的值标记箱线图中位数时,将得出以下曲线图。
df.m <- aggregate(value~year+station, data = df, FUN = function(x) median(x))
d <- d + geom_text(data = df.m, aes(x = year, y = value, label = value))
d

geom_boxplot绘制的中位数根本不是中位数。标签以正确的y轴值绘制,但箱形图的中间铰链绝对不在中位数处。我已经为此困扰了几天。

这是什么原因呢?如何用正确的中位数产生这种类型的显示?如何调试或诊断该图?

最佳答案

这个问题的解决方案是在scale_y_continuous的应用程序中。 ggplot2将按以下顺序执行操作:

  • 比例转换
  • 统计计算
  • 坐标转换

  • 在这种情况下,由于调用了比例转换,因此ggplot2排除了比例限制之外的数据,以进行箱线图铰链的统计计算。但是,由 aggregate函数计算并在 geom_text指令中使用的中位数将使用整个数据集。这会导致不同的中间铰链和文本标签。

    解决方案是忽略 scale_y_continuous指令,而是使用:
    d <- ggplot(data = df, aes(x = year, y = value)) +
    geom_boxplot(aes(fill = station)) +
    facet_grid(station~.) +
    theme(legend.position = "none")) +
    coord_cartesian(y = c(0,15))

    这使ggplot2可以使用整个数据集来计算箱线图铰链统计信息,同时限制图形的图大小。

    关于r - ggplot2 boxplot中位数未按预期绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29304712/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com