我有一个使用ggplot的情节,我想为它添加点和误差条。我正在使用geom_errorbar和geom_point,但我收到一个错误:“提供给连续比例的离散值”,我不知道为什么。下图中的数据标签应保持不变。我只想在现有图表中添加新点。新图形看起来应如下图所示,除了Y轴上每个标签有两个点/ CI条。
以下示例来自lme4包,它使用下面的ggplot生成带置信区间的图(除了最后两行borken代码之外,所有都可以复制)。我的数据不同之处在于它包含大约15个截距而不是6个(这就是我使用scale_shape_manual的原因)。
最后两行代码是我尝试添加积分/置信区间。我要为此付出50美元的赏金。如果我不清楚,请告诉我。谢谢!
library("lme4")
data(package = "lme4")
# Dyestuff
# a balanced one-way classiï¬cation of Yield
# from samples produced from six Batches
summary(Dyestuff)
# Batch is an example of a random effect
# Fit 1-way random effects linear model
fit1 <- lmer(Yield ~ 1 + (1|Batch), Dyestuff)
summary(fit1)
coef(fit1) #intercept for each level in Batch
randoms<-ranef(fit1, postVar = TRUE)
qq <- attr(ranef(fit1, postVar = TRUE)[[1]], "postVar")
rand.interc<-randoms$Batch
#THESE ARE THE ADDITIONAL POINTS TO BE ADDED TO THE PLOT
Inter <- c(-25,-45,20,30,23,67)
SE2 <- c(20,20,20,20,20,20)
df<-data.frame(Intercepts=randoms$Batch[,1],
sd.interc=2*sqrt(qq[,,1:length(qq)]), Intercepts2=Inter, sd.iterc2=SE2,
lev.names=rownames(rand.interc))
df$lev.names<-factor(df$lev.names,levels=df$lev.names[order(df$Intercepts)])
library(ggplot2)
p <- ggplot(df,aes(lev.names,Intercepts,shape=lev.names))
#Added horizontal line at y=0
#Includes first set of points/confidence intervals. This works without error
p <- p + geom_hline(yintercept=0) +geom_errorbar(aes(ymin=Intercepts-sd.interc, ymax=Intercepts+sd.interc), width=0,color="black") + geom_point(aes(size=2))
#Removed legends and with scale_shape_manual point shapes set to 1 and 16
p <- p + guides(size=FALSE,shape=FALSE) + scale_shape_manual(values=c(16,16,16,16,16,16))
#Changed appearance of plot (black and white theme) and x and y axis labels
p <- p + theme_bw() + xlab("Levels") + ylab("")
#Final adjustments of plot
p <- p + theme(axis.text.x=element_text(size=rel(1.2)),
axis.title.x=element_text(size=rel(1.3)),
axis.text.y=element_text(size=rel(1.2)),
panel.grid.minor=element_blank(),
panel.grid.major.x=element_blank())
#To put levels on y axis you just need to use coord_flip()
p <- p+ coord_flip()
print(p)
#####
# code for adding more plots, NOT working yet
p <- p +geom_errorbar(aes(ymin=Intercepts2-sd.interc2, ymax=Intercepts2+sd.interc2),
width=0,color="gray40", lty=1, size=1)
p <- p + geom_point(aes(Intercepts2, lev.names),size=0,pch=7)
答案 0 :(得分:3)
首先,在您的数据框df
和geom_errorbar()
中,有两个不同的变量sd.iterc2
和sd.interc2
。已在df
更改为sd.interc2
。
对于geom_point()
的最后一行,您会收到错误,因为x
和y
值的顺序错误。当您使用coord_flip()
时,x
和y
值应与coord_flip()
之前的原始图表中的顺序相同,即lev.names
为{ {1}},x
为Intercepts2
。为了更好地说明,还将y
更改为5.
size=
要为拦截类型的点添加图例,一个选项是将数据重新整形为长格式并添加具有拦截类型的新列。对现有数据的其他选择是,首先从+ geom_point(aes(lev.names,Intercepts2),size=5,pch=7)
电话中删除shape=lev.names
。然后,在ggplot()
次调用中,在geom_point()
内添加shape="somename"
。然后使用aes()
设置您需要的形状值。
scale_shape_manual()