#r #plot #ggplot2 #visualization
#r #построить #ggplot2 #визуализация
Вопрос:
Как я могу нарисовать несколько линий между двумя гранями?
Я попытался сделать это, начертив точки с минимальным значением верхнего графика, но они не находятся между двумя гранями. Смотрите рисунок ниже.
Пока это мой код:
t <- seq(1:1000)
y1 <- rexp(1000)
y2 <- cumsum(y1)
z <- rep(NA, length(t))
z[100:200] <- 1
df <- data.frame(t=t, values=c(y2,y1), type=rep(c("Bytes","Changes"), each=1000))
points <- data.frame(x=c(10:200,300:350), y=min(y2), type=rep("Bytes",242))
vline.data <- data.frame(type = c("Bytes","Bytes","Changes","Changes"), vl=c(1,5,20,5))
g <- ggplot(data=df, aes(x=t, y=values))
geom_line(colour=I("black"))
facet_grid(type ~ ., scales="free")
scale_y_continuous(trans="log10")
ylab("Log values")
theme(axis.text.x = element_text(angle = 90, hjust = 1), panel.margin = unit(0, "lines"))
geom_point(data=points, aes(x = x, y = y), colour="green")
g
Комментарии:
1. Как насчет использования
grid.lines
из packagegrid
2. Добавьте
, panel.background = element_rect(colour="black")
в свойtheme
Ответ №1:
Чтобы достичь этого, вы должны установить поля внутри графика равными нулю. Вы можете сделать это с помощью expand=c(0,0)
. Изменения, которые я внес в ваш код:
- При использовании
scale_y_continuous
вы можете определить метку оси внутри этой части, и вам не нужен отдельный элементylab
. - Изменено
colour=I("black")
наcolour="black"
insidegeom_line
. - Добавлено
expand=c(0,0)
вscale_x_continuous
иscale_y_continuous
.
Полный код:
ggplot(data=df, aes(x=t, y=values))
geom_line(colour="black")
geom_point(data=points, aes(x = x, y = y), colour="green")
facet_grid(type ~ ., scales="free")
scale_x_continuous("t", expand=c(0,0))
scale_y_continuous("Log values", trans="log10", expand=c(0,0))
theme(axis.text.x=element_text(angle=90, vjust=0.5), panel.margin=unit(0, "lines"))
что дает:
Добавление линий также можно выполнить с помощью geom_segment
. Обычно линии (сегменты) будут отображаться в обеих гранях. Если вы хотите, чтобы они отображались между двумя гранями, вам придется ограничить это в data
параметре:
ggplot(data=df, aes(x=t, y=values))
geom_line(colour="black")
geom_segment(data=df[df$type=="Bytes",], aes(x=10, y=0, xend=200, yend=0), colour="green", size=2)
geom_segment(data=df[df$type=="Bytes",], aes(x=300, y=0, xend=350, yend=0), colour="green", size=1)
facet_grid(type ~ ., scales="free")
scale_x_continuous("t", expand=c(0,0))
scale_y_continuous("Log values", trans="log10", expand=c(0,0))
theme(axis.text.x=element_text(angle=90, vjust=0.5), panel.margin=unit(0, "lines"))
что дает:
Комментарии:
1. Я использовал geom_point для построения линий, которые я хочу. Линии могут быть непоследовательными. Итак, мой вопрос в том, как добавить эти зеленые линии точно посередине двух графиков.
2. @Enrique Смотрите мой обновленный ответ, это то, что вы ищете?
3. @Enrique Смотрите мой обновленный ответ, я также добавил другой метод рисования линий.