在ggplot,R中更改离散轴刻度线

Changing discrete axis tick marks in ggplot, R

我正在创建一个图来显示每个因素的两个模型的置信区间。因此,如果我的因子是 'A'、'B'、'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()  

我认为最好的办法是更改数据框,使因子和模型分开列。

这样,刻度会自动按照您想要的方式出现。默认情况下,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')