【问题标题】:ggplot2: axis does not show all ticks/breaksggplot2:轴不显示所有刻度/中断
【发布时间】:2019-11-25 15:42:20
【问题描述】:

我目前正在使用 R 中的 ggpubr 包(基于 ggplot2)绘制数据。当我绘制包括标准误差在内的两个条件的平均值时,y 轴应限制在 1 到 7 之间,我表示使用:

p <- ggline(data, x = "condition", y = "measure", 
            add = c("mean_se"), 
            ylab = "Measure")
ggpar(y, ylim = c(1, 7), ticks=T, yticks.by = 1)

然而,在最终图中,y 轴仅显示 1 到 6 之间的值

我尝试使用本机 ggplot2 绘制相同的数据,但一旦我更改布局,问题仍然存在。 对于 ggplot2 我使用:

p <- ggplot(data, aes(x=condition, y=measure)) + 
geom_line() +
geom_point()+
geom_errorbar(aes(ymin=measure-se, ymax=measure+se), width=.2, position=position_dodge(0.05)) +
ylab("measure") +
xlab("Condition")
p + scale_y_continuous(name="measure", limits=c(1, 7), breaks=c(1:7))
p + theme_classic()

如果有人能帮我解决这个问题,那就太好了。

编辑: 正如 cmets 中所建议的,这是我尝试使用 ggplot2 绘制的数据:

structure(list(condition = structure(3:4, .Label = c("IC", "SC", 
"ILC", "SLC"), class = "factor"), measure = c(4.10233918128655, 3.83040935672515
), se = c(0.235026318386523, 0.216811675834834)), class = "data.frame", row.names = c(NA, 
-2L))

【问题讨论】:

  • 将 breaks=c(1:7) 更改为 breaks = seq(1,7, by = 1) 应该可以工作
  • 感谢您的回复,直到我将主题更改为经典,然后它再次停止在 6。
  • 请在您的问题中包含一些数据,以便其他人可以重现您的问题。使用dput(some_data) 将数据变成易于阅读的格式。
  • @aaumai:that 应该如何工作?!唯一的区别是seq 返回一个数字,而不是整数向量,但这对于 ggpar 无关紧要。
  • 实际上,除了将theme_classic 和scale_y_continuous 同时添加到情节之外,您所做的一切都正确率为 99%。

标签: r ggplot2 ggpubr


【解决方案1】:

解决方案要简单得多。你做的一切都是对的!除了一处笔误。这是发生了什么:

首先,你生成你的初始情节,很好。

p <- ggplot(data, aes(x=condition, y=measure)) + 
geom_line() + geom_point() +
geom_errorbar(aes(ymin=measure-se, ymax=measure+se), 
     width=.2, position=position_dodge(0.05)) + 
ylab("measure") +
xlab("Condition")

这个情节没有限制。当您添加限制并显示它时,比例是正确的:

p + scale_y_continuous(name="measure", limits=c(1, 7), breaks=c(1:7))

但是,请注意 p 没有改变!您没有存储将限制添加到 p 的结果。因此,p 仍然没有 scale_y_continuous。难怪当你打字的时候

p + theme_classic()

...限制消失了。但是,如果您尝试

p <- p + scale_y_continuous(name="measure", limits=c(1, 7), breaks=c(1:7))
p + theme_classic()

一切都会正确的。

【讨论】:

    【解决方案2】:

    我想我得到了类似于你的情节的东西,带有正确的 y 轴,代码如下:

    ggplot(data, aes(x = condition, y = measure)) + 
      geom_point() +
      geom_errorbar(aes(ymin = measure-se, ymax = measure+se), 
                    width = .2, position = position_dodge(0.05)) +
      # Group prevents geom_line interpreting each x-axis point as it's own group
      geom_line(aes(group = rep(1, nrow(data)))) +
      xlab("Condition") + 
      # Expand is optional, it prevents padding beyond 1 and 7
      scale_y_continuous(name = "measure", 
                         limits = c(1, 7), 
                         breaks = 1:7, 
                         expand = c(0,0)) +
      theme_classic()
    
    

    【讨论】:

    • 看起来很完美,非常感谢!但是,与我的代码相比,我正在努力确定您的代码中的关键编辑。您能否给我一个简短的反馈,您认为问题是什么?
    • 我认为您的 ylab() 论点推翻了 scale_y_continuous(),但我不是 100% 确定。
    • 没有区别。看我的回答。您犯了一个简单的笔误 - 您忘记将再次添加比例的结果存储在 p 中,所以当您调用 p + theme_classic() 时,p 仍然没有设置限制。
    • 或者确实是一月份所说的,当您添加scale_y_continuous()时,该图未分配给变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    相关资源
    最近更新 更多