【问题标题】:Error: no stat called StatHline错误:没有名为 StatHline 的统计数据
【发布时间】:2016-04-17 23:38:12
【问题描述】:

我有一个数据框如下:

variable=c("D","D","C","C","C","A","B","B","B","B")
value=c(80,100,70,68,65,45,33,31,36,32)
Count=as.integer(c(5,10,4,5,2,7,3,5,6,2))
mean=c(93.3,93.3,68.2,68.2,68.2,45,33.4,33.4,33.4,33.4)
sumVarVal=data.frame(variable=variable,value=value,Count=Count,mean=mean)

我可以绘制一个漂亮的图(其中正方形的大小对应于具有特定 x 值和 y 值的观察计数),如下所示:

library(ggplot2)
ggplot(sumVarVal, aes(variable, value)) + 
  geom_point(aes(size = Count), pch=15) + 
  guides(fill=guide_legend(title="New")) + 
  theme(legend.background = element_rect(fill="gray90", 
        size=.5, 
        colour = "black"), 
        legend.text=element_text(size=rel(1.3)), 
        legend.title=element_text(size=rel(1.3), face="plain"), 
        legend.position="bottom", 
        axis.text = element_text(size=rel(1.3)), 
        axis.title = element_text(size = rel(1.3))) + 
  labs(x="Learning Outcome", y = "Percentage Grade")

但是,我曾经有一段额外的代码(在语法的末尾),它允许我在四个主题中的每一个上叠加一个水平条,表示平均百分比分数。这些值存储在 df$mean 中。这是我使用的代码:

ggplot(sumVarVal, aes(variable, value)) +
  geom_point(aes(size = Count), pch=15) + 
  guides(fill=guide_legend(title="New")) + 
  theme(legend.background = element_rect(fill="gray90", size=.5, colour = "black"), 
        legend.text=element_text(size=rel(1.3)), 
        legend.title=element_text(size=rel(1.3), face="plain"), 
        legend.position="bottom", 
        axis.text = element_text(size=rel(1.3)),
        axis.title = element_text(size = rel(1.3))) + 
  labs(x="Learning Outcome", y = "Percentage Grade") + 
  geom_errorbar(stat = "hline", width=0.6, colour = "blue", size = 1, aes(ymax=..y..,ymin=..y.., yintercept = mean))

对于版本1.0.1,这给出:

使用版本2.0.0,现在会导致错误:

错误:没有调用 StatHline 的统计数据。

我知道这可能与 ggplot2 的最新升级有关。我最近看到过其他关于它的 cmets (geom_errorbar - "No stat called StatHline")。但是,由于我的代码围绕使用 stat="hline",当我尝试其中一些建议时,我也无法让我的代码工作。也许我对原始代码的某些不理解导致我无法更新此问题?

编辑:我已经考虑了一些建议,目前正在使用此代码:

ggplot(sumVarVal, aes(variable, value)) +
  geom_point(aes(size = Count), pch=15) + 
  guides(fill=guide_legend(title="New")) + 
  theme(legend.background = element_rect(fill="gray90", size=.5, colour = "black"), 
        legend.text=element_text(size=rel(1.3)), 
        legend.title=element_text(size=rel(1.3), face="plain"), 
        legend.position="bottom", 
        axis.text = element_text(size=rel(1.3)),
        axis.title = element_text(size = rel(1.3))) + 
  labs(x="Learning Outcome", y = "Percentage Grade") + 
  geom_errorbar(stat = "summary", fun.y = "mean", width=0.6, colour = "blue", size = 1, aes(ymax=..y..,ymin=..y.., yintercept = mean))

这给了我一个如下所示的输出:

似乎一些平均蓝线与它们的值不一致,正如最初在平均向量中给出的那样。例如,对于变量“D”,它的平均值应为 93.3,但蓝色水平线似乎显示为 90.0。在我的真实代码中效果更加显着(不是这个 MWE)。有什么想法可能导致这种差异吗?

【问题讨论】:

  • 没有对象sumVarVal。请在发布之前测试您的示例。
  • stat = "summary", fun.y = "mean" 似乎有效。
  • 谢谢@alistaire!对不起@Pascal;在创建和测试我的 MWE 之前,我需要记住删除所有变量。
  • 哦!我看到了问题:您命名了一个名为 mean 的变量,这非常令人困惑,我误解了您要绘制的内容。将yintercept(我认为不再存在?)更改为y,问题就消失了。

标签: r error-handling ggplot2


【解决方案1】:

stat_hlinegot removed in ggplot2 2.0.0,但不要害怕;无论如何,这不是真的必要。如果您完全删除stat 参数,它将默认为identity,这很好。 (如果您愿意,summary 也可以工作。)不过,您需要更改 aes 映射,将 yintercept 更改为 y 以考虑新的 stat

大家一起,

ggplot(sumVarVal, aes(variable, value)) +
  geom_point(aes(size = Count), pch=15) + 
  guides(fill=guide_legend(title="New")) + 
  theme(legend.background = element_rect(fill="gray90", size=.5, colour = "black"), 
        legend.text=element_text(size=rel(1.3)), 
        legend.title=element_text(size=rel(1.3), face="plain"), 
        legend.position="bottom", 
        axis.text = element_text(size=rel(1.3)),
        axis.title = element_text(size = rel(1.3))) + 
  labs(x="Learning Outcome", y = "Percentage Grade") + 
  geom_errorbar(width=0.6, colour = "blue", size = 1, aes(ymax=..y.., ymin=..y.., y = mean))

生产

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 2021-12-11
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    相关资源
    最近更新 更多