Я хотел бы сохранить метки по умолчанию ggplot2
для оси Y ниже, но всегда имеет галочку оси Y и/или метку y = 100
, чтобы выделить точку пересечения горизонтальной линии.
library(ggplot2)
maxValue <- 1000
df <- data.frame(
var1 = seq(1, maxValue, by = 25),
var2 = seq(1, maxValue, by = 50)
)
ggplot(df, aes(x = var1, y = var2)) +
geom_point() +
geom_hline(yintercept = 100, color = "red")
Created on 2022-04-09 by the reprex package (v2.0.1.9000)
Ожидаемый результат:
Обратите внимание, что maxValue
может быть чем угодно. Таким образом, решение просто увеличить шаг на 100 не работает. Например:
plot <- plot +
scale_y_continuous(
breaks = seq(0, max(df$y) + 100, 100),
labels = as.character(seq(0, max(df$y) + 100, 100))
)
Это связано с тем, что если максимальное значение равно 10000
или подобному большому числу, количество меток будет подавляющим. Вот почему я хотел бы остаться с метками оси Y по умолчанию, которые предоставляет ggplot2, и добавить только одну дополнительную метку в y = 100
.
По умолчанию ggplot2
будет вычислять разрывы оси по умолчанию следующим образом (см. этот ответ для получения более подробной информации):
labeling::extended(min(df$var1), max(df$var1), m = 5))
Мы можем просто добавить ваше пользовательское значение 100 к этому вектору и передать его в scale_y_continous
def_breaks <- labeling::extended(min(df$var1), max(df$var1), m = 5)
ggplot(df, aes(x = var1, y = var2)) +
geom_point() +
geom_hline(yintercept = 100, color = "red") +
scale_y_continuous(breaks = c(100, def_breaks),
# pass to minor breaks so that they are not messed up
minor_breaks = def_breaks)
Если это нормально, чтобы метка находилась на противоположной (= правой) стороне вашей оси Y, вы можете использовать
dup_axis
следующим образом:ggplot() + ... + scale_y_continuous(sec.axis = dup_axis(breaks = maxValue))