ggplot geom_errorbarh错误(在连续输入时需要离散,但在输入为离散时要连续)

时间:2017-12-04 18:11:41

标签: r ggplot2

我正在使用ggplot2创建用于元分析的森林图。 Here is what an earlier version/incomplete graph looked like.

我现在的问题是,我将重新开始工作,一切正常,但我无法获得geom_errorbarh的错误栏。

数据: Here is a data file from dput on my dropbox.对于我的生活,我无法弄清楚如何将其直接粘贴到此处以复制并粘贴到R中的方式没有问题。无论如何,如果您只是保存该文件(q.df)并运行df.forest <- dget("your-path/q.df"),那么您将拥有一个可用的df。 (注意:这是从我正在使用的完整df中解析出来的,只包括这个特定情节所需的变量,但是如果某些事情没有意义,请告诉我,我会试着澄清一下。)

所以这很有用并产生我想要的图形,除了误差条。

ggplot(df.forest, aes(y=ID, x=g,  shape = iv.domain, size = plot.weight))+
 geom_point(aes(size = iv.domain))+
 scale_shape_manual(name = "IV Domain",
                 values = c(15, 16, 17, 5),
                 labels = c("Abstraction", "Social", "Temporal", 
 "Summary\neffects"))+
 ylab("Refrence")+
 scale_x_continuous(limits=c(-1.5,2.5), name='Effect size (g)')+
 geom_vline(xintercept=0, color='dark grey', linetype='dotted')+
 facet_grid(dv.level~., scales= 'free', space='free')+
 theme_bw()+
 theme(panel.grid.major=element_blank(),
    panel.grid.minor=element_blank(),
    panel.border=element_blank(),
    axis.line=element_line(),
    text=element_text(family='Times'),
    plot.caption=element_text(hjust = 0, vjust = -7),
    plot.margin = unit(c(.25,.25,.75,.25), "cm"))+
 guides(size = FALSE) +
 scale_size_discrete(range = c(1.5,4.5))

但是,如果我添加:+ geom_errorbarh(aes(xmin=gLL, xmax=gUL),height=.3),(其中gLLgUL数字值,代表95%CI下限/上限),它会给出我错了:
Error: Continuous value supplied to discrete scale

但是,如果我输入gLLgUL+ geom_errorbarh(aes(xmin=gLL.f, xmax=gUL.f),height=.3)的分解版本,则会给出相反的错误:
Error: Discrete value supplied to continuous scale

我已经搜索了高低,并且似乎无法找到任何人遇到问题的函数,当你输入它是连续的时候说某些东西应该是离散的,但当你说某些东西应该是连续的输入它作为离散的。

此外,我不知道为什么它昨天有效,但今天不行。我已经重新启动了R /清除了我的环境,并逐行浏览了我的整个脚本,以确保导致此错误的任何内容都没有关闭,但我找不到任何内容。我尝试将aes()中的geom_errorbarh添加到ggplot(aes()),但这并没有改变任何内容。而且,如果我在没有geom_errorbarh的情况下运行这些行,它会使我想要的精确图形减去误差条,因此错误肯定在该行中。

任何帮助都将非常感谢!

干杯!

编辑:感谢@ eipi10我明白了。我忽略了我改变了我的大小aes()变量的位置(并没有考虑它,因为它在geom_errorbarh行添加之前运行得很好)。这也解释了为什么它让我使用scale_size_discrete这是没有意义的,但它有效,所以我去了。无论如何,一旦我删除了aes()中的geom_point(),并将scale_size_discrete更改为scale_size,就可以了!谢谢! -AE

1 个答案:

答案 0 :(得分:1)

这是因为您有两个大小映射,主ggplot调用中为size = plot.weightsize=iv.domain中为geom_point。第一个是连续的,第二个是离散的。您可以拥有一个或另一个,但不能同时拥有两个,scale_size_***调用必须与您映射到大小的变量类型(连续或离散)匹配。