2

ggplot を使用したプロットがあり、それにポイントとエラー バーを追加したいと考えています。geom_errorbar と geom_point を使用していますが、「連続スケールに離散値が供給されました」というエラーが発生し、その理由がわかりません。以下のプロットのデータ ラベルは同じままである必要があります。既存のグラフに新しいポイントを追加したいだけです。Y 軸のラベルごとに 2 つのポイント/CI バーがあることを除いて、新しいグラフは次のようになります。

次の例は lme4 パッケージからのもので、以下の ggplot を使用して信頼区間を含むプロットを生成します (borken コードの最後の 2 行を除いてすべて複製できます)。私のデータは、以下の 6 ではなく約 15 のインターセプトが含まれているという点でのみ異なります (これが、scale_shape_manual を使用している理由です)。

コードの最後の 2 行は、ポイント/信頼区間を追加する試みです。これに 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)
4

1 に答える 1