R语言 在ggplot底部添加次x轴

lnlaulya  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(176)

我想创建一个图,并添加一个辅助z轴。问题是,我不希望辅助轴在顶部,但我希望两个x轴在图表的底部。任何想法如何做到这一点?
我有这个数据框:

df <- read.table(text="Control     Stress days sd_control  sd_stress
-0.2866667 -0.2833333   X1 0.11846237 0.05773503
-0.2566667 -1.0333333   X2 0.08144528 0.15275252
-0.4766667 -1.4500000   X3 0.09291573 0.10000000
-0.4900000 -1.2766667   X4 0.21517435 0.22501852
-0.4600000 -1.2666667   X5 0.07549834 0.40722639
-0.2633333 -1.0833333   X6 0.12662280 0.10408330
-0.2833333 -1.0333333   X7 0.03511885 0.07767453", header=T)

我创建一个简单的图,并添加一个次x轴,如下所示:

ggplot(data=df,aes(x=Control, y=Stress))+geom_point()+scale_x_continuous(sec.axis = sec_axis(~ .+50,))

得到下面的图:

现在,我如何将轴从上移动到下?
不确定在ggplot中是否可能,但R有一个名为axis()的函数,可以向常规图添加具有任何特性的次轴。

lvjbypge

lvjbypge1#

另一种可能性:

ggplot(data=df,aes(x=Control, y=Stress))+geom_point() +
  scale_x_continuous(labels = ~paste(., .+50, sep = "\n"),
                     name = "Primary axis\nSecondary axis")

如果再多做一些努力,就可以把它扩展到任何一组任意的尺度:

labels <- data.frame(
  x = c(
    seq(-0.5, -0.25, length.out = 10),
    seq(-0.5, -0.25, length.out = 11)
  ),
  label = c(
    format(seq(-0.5, -0.25, length.out = 10), digits = 2),
    paste0("\n", LETTERS[1:11])
  )
)

ggplot(data=df,aes(x=Control, y=Stress))+geom_point() +
  scale_x_continuous(breaks = labels$x,
                     labels = labels$label,
                     minor_breaks = NULL)

或者我们可以将第二个轴作为标签叠加:

ggplot(data=df,aes(x=Control, y=Stress))+geom_point() +
  scale_x_continuous(breaks = seq(-0.5, -0.25, length.out = 10),
                     labels = format(seq(-0.5, -0.25, length.out = 10), digits = 2)) +
  annotate("text", 
           x = seq(-0.5, -0.25, length.out = 11),
           y = -1.62,
           size = 2.5,
           label = LETTERS[1:11]) +
  coord_cartesian(ylim = c(-1.5, NA), clip = "off")

(我没有费心去调整页边距来腾出空间,但您应该明白我的意思。)

相关问题