我正在使用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

最佳答案

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

关于r - ggplot geom_errorbarh错误(输入为连续时希望离散,但输入为离散时希望连续),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47639443/

10-12 14:04