为上/下键添加行,中位数到ggplot boxplot

时间:2019-07-04 04:43:28

标签: r ggplot2 line boxplot

我有一个类似的箱形图:

enter image description here

真的很难分辨哪个群体的价值更高。

如何在图表中为每个组分别添加连接Q1,Q2,Q3的线?

1 个答案:

答案 0 :(得分:1)

您可以使用stat_summary将聚合函数应用于每组y值,并将结果传递给geom。需要注意的是:箱形图已经分组(每个箱是一个组),因此要使几何图形跨箱图,您必须在geom_boxplotstat_summary之间进行不同的分组设置。将群体美学视为定义应该连接或分开的对象。

有关如何指定聚合函数的完整详细信息,请参见?stat_summary,但是tl; dr是它可以采用y,ymin和ymax的独立函数,也可以采用称为{{1}的函数。 }会返回包含名为fun.datayymin的列的数据帧。如果您不想编写匿名函数,也可以通过ymax传递Args。如果几何不需要全部三种美学,则可以仅指定一种(例如,线条仅需要fun.args)。

因此要在第一,第二和第三四分位数上画线,并加一些躲避,以便所有内容都对齐,

y

boxplots with lines

不过,这个情节非常忙。另一个平行坐标/箱线图交叉可能是对第一和第三分位数使用library(ggplot2) data('mpg', package = 'ggplot2') mpg$cyl <- factor(mpg$cyl) # note grouping here is set to what stat_summary needs (so we don't have to override so many times) ggplot(mpg, aes(class, hwy, color = cyl, group = cyl)) + geom_boxplot(aes(group = NULL)) + # override grouping here back to the default stat_summary(geom = 'line', fun.y = median, position = position_dodge(0.75)) + stat_summary(geom = 'line', fun.y = quantile, fun.args = list(probs = 0.25), position = position_dodge(0.75)) + stat_summary(geom = 'line', fun.y = quantile, fun.args = list(probs = 0.75), position = position_dodge(0.75)) (需要ymin和ymax):

geom_ribbon

boxplots with line and ribbon