【问题标题】:Changing bar width when using stat_summary with ggplot将 stat_summary 与 ggplot 一起使用时更改条形宽度
【发布时间】:2013-07-05 01:05:43
【问题描述】:

我在 ggplot 中使用stat_summary 来绘制条形图。我想改变条的宽度。通常这是使用width 选项完成的。使用预先汇总的数据和stat="identity,它可以按预期工作:

data <- data.frame(group=rep(c("a","b"), 20), y=rnorm(40,100,50))
se <- function(x, na.rm=T) sd(x, na.rm=na.rm)/sqrt(length(x))
data2 <- cast(data, group ~ ., value="y", c(mean, se))
ggplot(data2, aes(group, mean, ymin=mean-1.96*se, ymax=mean+1.96*se)) +
 geom_bar(stat="identity", width=0.5) + geom_errorbar(width=0, size=2)

但是,在使用 stat_summary 对原始数据绘制的同一图中,条形不会改变宽度,而误差线会改变:

ggplot(data, aes(group, y)) + stat_summary(fun.y="mean", geom="bar", width=0.5) +
 stat_summary(fun.data="mean_cl_normal", geom="errorbar", width=0, size=2)

即使使用stat_summary,也有办法改变条形宽度吗?

由于第一个示例有效,这个问题显然已经有了解决方法,但是,我真的很想知道是否有任何方法可以使用 stat_summary,因为我经常使用它并且经常更多方便。

谢谢!

【问题讨论】:

  • 欢迎来到stackoverflow。恭喜第一个问题写得很好,有一个可重复的例子!!
  • 我遇到了类似的问题,在 stat_summary 的文档中发现可以在 fun.data 函数中定义宽度美学。

标签: r ggplot2


【解决方案1】:

这是444235 已知问题的主题

当前的解决方案是在aes 内传递width——这违背了ggplot 的原则(映射与设置),但至少它有效....

请注意,如果您想要没有错误栏的错误栏,可以使用linerange

ggplot(data, aes(group, y)) + 
 stat_summary(fun.y="mean", geom="bar", aes(width=0.5)) +
  stat_summary(fun.data="mean_cl_normal", geom="linerange",  size=2)

【讨论】:

  • 它有效,谢谢!我会在解决问题时暂时使用它。
  • 找了很久,现在终于找到了。感谢您提供非常有用的提示。
【解决方案2】:

此问题已解决。 width 现在也适用于 stat_summarygeom="errorbar"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2016-02-10
    相关资源
    最近更新 更多