我正在创建一个图表,显示每个因子的两个模型的置信区间。因此,如果我的因素是' A' B' C' C',我有六个置信区间CI1.A,CI2.A,CI1.B,CI2 .B,CI1.C,CI2.C。我使用的是简单的森林图,但希望y轴标签为A,B,C,其中A位于CI1.A和CI2.A的中间。如何重新排列刻度线以使它们出现在两个因素的中间?
这是一个玩具示例。我有49个因素,所以我需要一种能够阅读所有标签的方法。
factors <- c('A1', 'A2', 'B1', 'B2', 'C1', 'C2')
y <- c(1:6)
yhi <- y + .5
ylo <- y - .5
df <- data.frame(factors = factors, y = y, yhi =yhi,
ylo = ylo)
ggplot(df, aes(x=factors, y=y, ymin=ylo, ymax=yhi)) +
geom_linerange() +
coord_flip()
答案 0 :(得分:0)
我认为您最好的选择是更改数据框,以便因子和模型是单独的列。
这样,滴答声会自动按照你想要的方式出现。默认情况下,geom_linerange()
会将两个不同模型的线条范围放在彼此的顶部,但您可以使用position=position_dodge(width=<<NUMBER>>)
更改它。我使用0.1几乎将线条放在彼此的顶部。如果你想让它们更远,增加价值。我认为你最初的想法是关于width=1
。
#load package
require(ggplot2)
#make toy data
models <- rep(c(1,2), 3)
factors <- c('A', 'A', 'B', 'B', 'C', 'C')
df <- data.frame(factors=factors, models=factor(models),
y=1:6, yhi=1:6+0.5, ylo=1:6-0.5)
#do graphing
quartz(height=3, width=6)
ggplot(df, aes(x=factors, y=y, ymin=ylo, ymax=yhi, color=models)) +
geom_linerange(size=2, position=position_dodge(width=0.1)) +
coord_flip() +
theme_bw()
quartz.save('SO_29545579.png')