Как сохранить метки оси по умолчанию, но добавить дополнительную метку в ggplot2

Я хотел бы сохранить метки по умолчанию 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)

Ожидаемый результат:

enter image description here

Обратите внимание, что 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.

Если это нормально, чтобы метка находилась на противоположной (= правой) стороне вашей оси Y, вы можете использовать dup_axis следующим образом: ggplot() + ... + scale_y_continuous(sec.axis = dup_axis(breaks = maxValue))

I_O 09.04.2022 20:46
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
1
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию 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)

enter image description here

Другие вопросы по теме