Заштриховать область участка вне границ с помощью geom_abline

#r #ggplot2 #dplyr #graphics

#r #ggplot2 #dplyr #графика

Вопрос:

У меня есть простой рисунок ggplot, который выглядит следующим образом —

 ggplot(df, aes(x=n, y=n_e, colour = itt, linetype = itt))  
  # stat smooth for the lines only (using glm, y ~ x)
  geom_smooth(method = glm, se=F)  
  # tweak defaults a little
  update_geom_defaults("smooth", list(size = 0.7))   
  # manually tweak colors/linetype
  scale_colour_manual(values=c("Black","Black"))  
  scale_linetype_manual(values = c("solid","dashed")) 
  geom_abline(intercept = 0, slope = 1, color="red", 
              linetype="dotted", size=0.8)

  

Поскольку я не включил никаких фиктивных данных, вот как это выглядит.

область за пунктирной красной линией ab находится за пределами (т. Е. Мои данные не могут отставать от нее, поскольку y ограничено x).

Я хотел бы нанести серию тонких горизонтальных линий каждые 0,1 вдоль оси y, чтобы затенить эту область. Наклон линии равен 1, поэтому x1 = y1, x2 = y2 и т. Д.

Как я могу сгенерировать данные для построения линий и добавить их к моему существующему графику.

спасибо, Джейми график

Ответ №1:

Непонятно, почему вы не включили какие-либо фиктивные данные. Это немного усложняет воспроизведение вашего графика. Ниже приведена попытка сделать это.

 library(ggplot2)

df <- data.frame(x = 0, y = c(0, 0, -0.2),
                 xend = c(3, 22, 22), yend = c(3, 3, 2.2),
                 lty = 3:1,
                 col = c("red", "black", "black"))

p <- ggplot(df, aes(x, y, color = col, linetype = lty))  
  geom_segment(aes(xend = xend, yend = yend))  
  scale_color_identity()  
  scale_linetype_identity()

p
  

На самом деле это сложная часть. Строки довольно просты — достаточно одного geom_segment вызова:

 p   geom_segment(
  data = data.frame(x = 0, y = seq(0, 3, 0.06)),
  aes(xend = y, yend = y), color = "red", size = 0, linetype = 1
)
  

Создано 2020-11-09 пакетом reprex (версия 0.3.0)

Ответ №2:

Следуя из ответа Аллана,

Я столкнулся с несколькими ошибками, но это работает

    geom_segment(data = data.frame(x = 0, y = seq(0, 3.5, 0.06)),
  aes(x = y, xend = x, y = y, yend = y), color = "red", size = 0.5, linetype = 1, inherit.aes = FALSE)

  

Комментарии:

1. Привет, Джейми. Вы только что отклонили мой ответ. Есть ли что-то, что вам нужно, чтобы я изменил в этом?

2. привет, Аллан — я не смог заставить ваш ответ работать с предоставленным вами кодом, для этого нужно было указать x amp; y, а для ihenert.aes установить значение false.

3. Извините, я этого не оценил, но я ценю усилия. Как и многие здешние пользователи, я все еще нащупываю некоторые основы.

4. Нет проблем, Джейми. Спасибо. Это отличное место для обучения — я все еще учусь каждый день.