使用第二个数据源绘制误差条的R - ggplot失败



这是关于获得一些自定义错误条的上一个问题的后续问题。

  1. 情节的外观是我需要它的方式,所以不要担心仅仅在这方面发表评论(很高兴听到其他帮助的意见)
  2. 因为这些绘图是在循环中生成的,并且错误条实际上只在满足条件时才添加,所以我不能简单地预先合并所有数据,因此为了本练习的目的,假设绘图数据和错误条数据来自不同的dfs。

我有一个ggplot,我试图使用不同的数据帧添加一些错误条。当我调用绘图时,它说无法从父图中找到y值,尽管我只是尝试使用新数据添加误差条。我知道这一定是一个语法错误,但是我被难住了…

首先让我们生成数据和绘图

library(ggplot2)
library(scales)
# some data
data.2015 = data.frame(score = c(-50,20,15,-40,-10,60),
                       area = c("first","second","third","first","second","third"),
                       group = c("Findings","Findings","Findings","Benchmark","Benchmark","Benchmark"))
data.2014 = data.frame(score = c(-30,40,-15),
                       area = c("first","second","third"),
                       group = c("Findings","Findings","Findings"))
# breaks and limits
breaks.major = c(-60,-40,-22.5,-10, 0,10, 22.5, 40, 60)
breaks.minor = c(-50,-30,-15,-5,0, 5, 15,30,50) 
limits =c(-70,70)
# plot 2015 data
ggplot(data.2015, aes(x = area, y = score, fill = group)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.9)) +
  coord_flip() +
  scale_y_continuous(limit = limits, oob = squish, minor_breaks = breaks.minor, 
                     breaks = breaks.major)

调用plot (c)产生了一个如预期的漂亮的plot,现在让我们设置误差条并尝试将它们作为一个新图层添加到plot "c"

# get the error bar values
alldat = merge(data.2015, data.2014, all = TRUE, by = c("area", "group"), 
               suffixes = c(".2015", ".2014"))
alldat$plotscore = with(alldat, ifelse(is.na(score.2014), NA, score.2015))
alldat$direction = with(alldat, ifelse(score.2015 < score.2014, "dec", "inc"))
alldat$direction[is.na(alldat$score.2014)] = "absent"
#add error bars to original plot
c <- c+
  geom_errorbar(data=alldat, aes(ymin = plotscore, ymax = score.2014, color = direction), 
                position = position_dodge(width = .9), lwd = 1.5, show.legend = FALSE)

当我现在调用c时,我得到

"Error in eval(expr, envir, enclos) : object 'score' not found"

为什么要查找数据。2015$score当我只是想用第二个alldata数据帧覆盖geom_errorbar ?

编辑*我已经尝试使用alldata$plotscore和alldata$ score.2014指定错误条的ymin/ymax值(我确信这是不好的做法),它绘图,但条形图在错误的位置/与绘图不一致(例如交换了周围,在基准条形图上,等等)

根据我的经验,这个关于某些变量未被找到的错误告诉我R在data.frame中查找变量,但它不在那里。有时解决方案就像修复错字一样简单,但在您的情况下,score变量不在用于制作错误条的数据集中。

names(alldat)
[1] "area"       "group"      "score.2015" "score.2014" "plotscore"  "direction"

y变量是geom_errorbar所需的美学。因为您在ggplot中全局设置了y变量,所以除非您特别将其映射到不同的变量,否则其他几何体将继承全局y。在当前的数据集中,你需要将y映射到2015年的分数变量。

geom_errorbar(data=alldat, aes(y = score.2015, ymin = plotscore, 
                               ymax = score.2014, color = direction), 
              position = position_dodge(width = .9), lwd = 1.5, show.legend = FALSE)

在您的评论中,您表示您还必须将fill添加到geom_errobar,以及,但是当我运行代码时,我没有发现这是必要的(您可以在上面看到group是您给出的示例中第二个数据集中的变量)。

另一个选项是确保合并后2015分数变量仍然命名为score。这可以通过更改merge中的suffixes参数来实现。然后score将在第二个数据集中,你不必在geom_errorbar中设置y变量。

alldat2 = merge(data.2015, data.2014, all = TRUE, by = c("area", "group"), 
            suffixes = c("", ".2014"))
...
names(alldat2)
[1] "area"       "group"      "score"      "score.2014" "plotscore"  "direction" 

相关内容

  • 没有找到相关文章

最新更新