我试图锁定变量的因子级别顺序,以使结果以与数据框相同的顺序显示在图中。
datad$outcome <- factor(data$outcome, levels = unadjusted.combined$outcome)
当某些行重复时,是否有一种方法可以解决此问题的顺序:我的行重复,因为我有两种不同度量的结果,这会产生错误:
Error in `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, : factor level [54] is duplicated
我的数据看起来像这样;
xvar outcome
x1 wt_2
x1 wt_3
x1 wt_4
x1 bmi_2
x1 bmi_3
x1 bmi_4
x2 wt_2
x2 wt_3
x2 wt_4
x2 bmi_2
x2 bmi_3
x2 bmi_4
最后,我制作了如下图:(当前结果按字母顺序排列)
ggplot(data=data, aes(x=outcome, y=estimate, ymin=lci, ymax=uci, colour=xvar)) + geom_pointrange() + geom_hline(yintercept=0, lty=2) + coord_flip()
答案 0 :(得分:1)
这里是一个答案的尝试。根据您的问题,您希望结果遵循原始数据的顺序,而不要遵循默认的字母顺序。
以下是一些示例数据:
data<-structure(list(xvar = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("x1", "x2"), class = "factor"),
outcome = structure(c(4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L,
1L, 2L, 3L), .Label = c("bmi_2", "bmi_3", "bmi_4", "wt_2",
"wt_3", "wt_4"), class = "factor"), estimate = c(10.40,
11.24, 10.09, 14.64, 10.48, 8.71, 13.27, 8.87, 9.97,
13.12, 12.17, 8.44)), row.names = c(NA,
-12L), class = "data.frame")
xvar
和outcome
均默认为因数。如果我们运行ggplot plot命令:
ggplot(data=data, aes(x=outcome, y=estimate, colour=xvar, ymin=0, ymax=15)) +
geom_pointrange() + geom_hline(yintercept=0, lty=2) #+ coord_flip()
现在要保留原始顺序,我们可以在factor函数中使用ordered = TRUE选项。使用levels=
#order the factors in the order they appear in the data frame
data$outcome <- factor(data$outcome, levels= unique(data$outcome), ordered=TRUE)
ggplot(data=data, aes(x=outcome, y=estimate, colour=xvar, ymin=0, ymax=15)) +
geom_pointrange() + geom_hline(yintercept=0, lty=2) #+ coord_flip()
这是您的问题变得模糊的地方。如果要按相同的顺序绘制x1和x2的结果,则需要通过paste(data $ xvar,data $ outcome)创建一个新变量,然后将该新变量用作x轴。
希望这能回答您的问题。