【问题标题】:R, ggplot2: add a specific tick + label to axis without changing other gridlinesR,ggplot2:在不更改其他网格线的情况下向轴添加特定的刻度+标签
【发布时间】:2020-09-03 02:45:50
【问题描述】:

我正在尝试使用 ggplot2 向轴添加特定的刻度线和标签,而不更改轴的其余部分或网格线。

假设我有以下情节:

library(ggplot2)

d <- data.frame(x = c(0:100), y = c(0:100))

plot <- ggplot(d, aes(x = x, y = y)) + geom_point()
plot

我想做的是在 y 轴上添加一个特定的刻度线和值,以指示某种截止点。在实际实现中,这个截止点和数据是为了绘制传递给函数的参数,所以我想这样做而不对值进行硬编码。

我找到了一个解决方案,可以将特定的刻度线 + 标签添加到轴 here,它可以正常工作。假设在这种情况下,我想在 y = 10 处添加它。但是,如果我尝试一下,网格线也会改变:

plot + scale_y_continuous(breaks = c(pretty(d$y), 10),
                          labels = c(pretty(d$y), 10))

请注意,现在,不是每 25 个单位有主网格线,每 12.5 个单位有次网格线,而是每 20 个单位有主网格线,每 10 个单位有次网格线。此外,由于某种神秘的原因,额外的次网格线已经在 y = 55 处添加。

有没有一种方法可以为 y = 10 添加刻度 + 标签,同时使 y 轴看起来像第一个图?理想情况下,该解决方案仍然允许我在设置 y 轴时使用 n.breaks 参数,这样我就可以请求一些休息时间,然后添加额外的休息时间。

【问题讨论】:

  • 您希望将参考线作为绘图网格的一部分而不是单独的geom_hline(yintercept = &lt;whatever desired value&gt;) + 注释标签的任何特殊原因?

标签: r ggplot2


【解决方案1】:

要使用你写的方法,你也需要指定minor.breaks

plot + scale_y_continuous(breaks = c(pretty(d$y), 10),
                          labels = c(pretty(d$y), 10), 
                          minor_breaks = pretty(d$y, n = 2*length(pretty(d$y))))

【讨论】:

  • 这修复了 y = 55 处的额外次要网格线的问题,但仍将次要网格线的间距更改为每 10 个单位,而主要网格线的间距为每 20 个单位。我想这样做,但保持与以前相同的次要/主要网格线(即,每 12.5 次次要,每 25 次主要)。有没有办法做到这一点?
  • 没关系,我刚刚想通了!你做y_breaks &lt;- c(ggplot_build(plot)$layout$panel_params[[1]]$y$get_breaks(), 10); y_labels &lt;- y_breaks; y_minor_breaks &lt;- ggplot_build(plot)$layout$panel_params[[1]]$y$get_breaks_minor(); plot + scale_y_continuous(breaks = y_breaks, labels = y_labels, minor_breaks = y_minor_breaks
【解决方案2】:

按照 Z.Lin 的建议,通常更容易和更清晰地将截止点设置为直线。即使它在轴上,也可能仍然需要一条线来获得所需的效果。

例如

library(ggplot2)

d <- data.frame(x = c(0:100), y = c(0:100))

plot <- ggplot(d, aes(x = x, y = y)) + geom_point()
plot

plot +
  geom_hline(yintercept = 10, linetype = "dotdash", size = 0.9, alpha = 0.5)+
  annotate(geom = "text",x = 80, y = 14, label = "Cut-off point", fontface = 'italic')

【讨论】:

  • 对不起---应该指定我也想添加一条线,尽管这并不困难。问题是,我不想在绘图上进行注释,而是将截止值标记为轴标签,因为我不想冒注释与数据点重叠的风险。他们没有在玩具示例中,但他们可能会给出任意数据集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多