#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. Нет проблем, Джейми. Спасибо. Это отличное место для обучения — я все еще учусь каждый день.