【发布时间】:2021-06-20 12:57:56
【问题描述】:
我有一些图是根据一些用户输入自动生成的。大多数情况下,情节运行良好。但是,一些用户要求确保在绘制数据的每一端始终有一个轴标签。例如,这个情节:
sample_data <-
data.frame(
x = rep(LETTERS[1:3], each = 3)
, y = 1:9 + 0.5
)
ggplot(
sample_data
, aes(x = x, y = y)) +
stat_summary(
fun = "mean"
)
在顶点上方或底部下方没有标签。我可以使用expand_limits 轻松添加它们:
ggplot(
sample_data
, aes(x = x, y = y)) +
stat_summary(
fun = "mean"
) +
expand_limits(y = c(2, 10))
然而,因为这些图是自动生成的,我不能每次都手动添加下一个轴点。我已经尝试将only.loose = TRUE 传递给labeling:extended,但这仍然不会改变显示的值(只要输入我想要的值):
ggplot(
sample_data
, aes(x = x, y = y)) +
stat_summary(
fun = "mean"
) +
scale_y_continuous(breaks = breaks_extended(only.loose = TRUE))
此外,一些绘图比这更复杂(例如,有或没有置信区间、附加分组等),并且使用dplyr 为绘图准备数据并直接通过管道输入ggplot (%>%)。因此,即使是像重新计算值这样的事情也很重要。
事实上,即使在这种情况下,它也会失败,因为添加扩展点来捕获下一组标签会改变标签。
ggplot(
sample_data
, aes(x = x, y = y)) +
stat_summary(
fun = "mean"
) +
scale_y_continuous(breaks = breaks_extended(n = 5
, only.loose = TRUE)) +
expand_limits(y =
sample_data %>%
group_by(x) %>%
summarise(my_mean = mean(y)) %>%
pull(my_mean) %>%
range() %>%
{labeling::extended(.[1], .[2], 5
, only.loose = TRUE)}
)
这似乎是因为
labeling::extended(2.5, 8.5, 5, only.loose = TRUE)
以 1 为单位返回 2 到 9 的范围,而:
labeling::extended(2, 9, 5, only.loose = TRUE)
返回 2 到 10 x 2 的范围。不知何故,breaks_extended 加入了一些额外的变化,尽管我是否追踪它并没有太大变化。我可以通过先计算休息时间来解决这个问题,但是(再次)这是针对一组相当复杂的绘图。
我觉得我错过了一些明显的观点,但它一直在逃避我。
【问题讨论】:
标签: r ggplot2 axis-labels