【问题标题】:Changing discrete axis tick marks in ggplot, R更改ggplot,R中的离散轴刻度线
【发布时间】:2015-04-09 17:52:27
【问题描述】:

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

【问题讨论】:

  • 对于我的回答,我假设您的意思是“希望 y 轴标签为 A、B、C,其中 A 位于 CI1.A 和 CI2 的中间。***A** *”。如果这不是错字,我不知道你想要什么,所以我的回答可能没有帮助。
  • 是的!已编辑,谢谢!

标签: r ggplot2


【解决方案1】:

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

这样,刻度线会自动按照您想要的方式出现。默认情况下,geom_linerange() 会将两个不同模型的 lineranges 放置在彼此之上,但您可以使用position=position_dodge(width=&lt;&lt;NUMBER&gt;&gt;) 更改它。我使用 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2021-11-01
    相关资源
    最近更新 更多