我正在使用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)
,(其中gLL
和gUL
是数字值,代表95%CI下限/上限),它会给出我错了:
Error: Continuous value supplied to discrete scale
。
但是,如果我输入gLL
和gUL
:+ 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
答案 0 :(得分:1)
这是因为您有两个大小映射,主ggplot调用中为size = plot.weight
,size=iv.domain
中为geom_point
。第一个是连续的,第二个是离散的。您可以拥有一个或另一个,但不能同时拥有两个,scale_size_***
调用必须与您映射到大小的变量类型(连续或离散)匹配。