R 带误差条的点图,两个系列,光抖动

R 带误差条的点图,两个系列,光抖动,r,plot,lattice,confidence-interval,R,Plot,Lattice,Confidence Interval,我收集了几项研究的数据。对于每项研究,我感兴趣的是性别变量的平均值,以及这是否有显著差异。对于每项研究,我都有男性和女性的平均值和95%置信区间 我想做的事情与此类似: 我使用了几种风格的点图(点图、点图2、点图),但没有完全达到目的 使用Hmisc中的Dotplot我成功地获得了一个系列及其错误条,但我不知道如何添加第二个系列 我使用了Dotplot,并根据给出的建议得到了错误条的垂直端点 下面是我正在使用的代码的一个工作示例 data<-data.frame(ID=c("Study1

我收集了几项研究的数据。对于每项研究,我感兴趣的是性别变量的平均值,以及这是否有显著差异。对于每项研究,我都有男性和女性的平均值和95%置信区间

我想做的事情与此类似:

我使用了几种风格的点图(点图、点图2、点图),但没有完全达到目的

使用
Hmisc
中的
Dotplot
我成功地获得了一个系列及其错误条,但我不知道如何添加第二个系列

我使用了
Dotplot
,并根据给出的建议得到了错误条的垂直端点

下面是我正在使用的代码的一个工作示例

data<-data.frame(ID=c("Study1","Study2","Study3"),avgm=c(2,3,3.5),avgf=c(2.5,3.3,4))
data$lowerm <- data$avgm*0.9 
data$upperm <- data$avgm*1.1
data$lowerf <- data$avgf*0.9
data$upperf <- data$avgf*1.1

# Create the customized panel function
mypanel.Dotplot <- function(x, y, ...) {
  panel.Dotplot(x,y,...)
  tips <- attr(x, "other")
  panel.arrows(x0 = tips[,1], y0 = y, 
               x1 = tips[,2], y1 = y, 
               length = 0.05, unit = "native",
               angle = 90, code = 3)
}

library(Hmisc)
Dotplot(data$ID ~ Cbind(data$avgm,data$lowerm,data$upperm), col="blue", pch=20, panel = mypanel.Dotplot,
        xlab="measure",ylab="study")

data不幸的是,我无法帮助您使用
Dotplot
,但我发现使用
ggplot
非常简单。您只需要稍微重新排列数据

library(ggplot2)
# grab data for males
df_m <- data[ , c(1, 2, 4, 5)]
df_m$sex <- "m"
names(df_m) <- c("ID", "avg", "lower", "upper", "sex")
df_m

# grab data for females
df_f <- data[ , c(1, 3, 6, 7)]
df_f$sex <- "f"
names(df_f) <- c("ID", "avg", "lower", "upper", "sex")
df_m

# bind the data together
df <- rbind(df_m, df_f)

# plot
ggplot(data = df, aes(x = ID, y = avg, ymin = lower, ymax = upper, colour = sex)) +
  geom_point(position = position_dodge(width = 0.2)) +
  geom_errorbar(position = position_dodge(width = 0.2), width = 0.1) +
  coord_flip() +
  scale_colour_manual(values = c("blue", "red")) +
  theme_classic()

请显示您的代码…谢谢,代码已添加。由于与原始作者达成协议,我无法共享原始数据,因此它无法运行。感谢添加该代码。不过,您还应该能够构建一个小的示例数据集,它可以在不泄露任何机密信息的情况下工作。也许将两位作者的数据进行子集划分,稍微更改数字并命名,然后发布。(这样做的目的是不让潜在的回答者自己猜测和重构你手中数据的格式。)@JoshO'Brien-谢谢,我做到了。现在图片不再反映问题的真实情况,但我没有足够的观点来发布图片。如果我可以的话,这将是非常直观的看到什么是需要的-人们可以很容易地比较我想得到什么和我有什么。希望现在问题清楚了。感谢@JoshO'BrienThanks@Henrik对答案的评论。这是一个非常巧妙的解决方案。我希望我也能从Dotplot中得到答案,因为我也想把它和我制作的另一个Dotplot放在一起,我希望有一致的外观和感觉。谢谢。我最终使用了yur代码(并学习了很多关于ggplot2的知识)。谢谢你的回答@亨里克:谢谢你的回答!
  # if you want horizontal grid lines you may change the last line with:
  theme_bw() +
  theme(panel.grid.major.y = element_line(colour = "grey", linetype = "dashed"),
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank())