Добавление geom_line ко всем граням в графике facet_wrap в R
Я пытаюсь создать график facet_wrap
, который сравнивает четыре отдельные строки с общей пятой строкой; цель состоит в том, чтобы эта пятая строка появлялась на всех четырех других графиках facet_wrap
.
Здесь мой минимальный код:
library(ggplot2)
x = c( 1, 3, 1, 3, 2, 4, 2, 4)
y = c( 1, 3, 2, 4, 1, 3, 2, 4)
type = c("A","A","B","B","C","C","D","D")
data = data.frame(x,y,type)
x = c( 4, 1)
y = c( 1, 4)
type = c("E","E")
line = data.frame(x,y,type)
ggplot(data, aes(x,y)) + geom_line() + facet_wrap(~type) +
geom_line(data = line, aes(x,y))
Я надеялся, что добавление пятой строки в качестве независимой data.frame
позволит мне сделать это, но она просто добавляет ее как пятую грань, как на следующем изображении:
![Bad facet plot]()
Я хочу, чтобы фасет "E" отображался на всех других графиках. Есть предположения? Я знаю, что geom_vline
, geom_hline
и geom_abline
будут отображаться на всех грани, но я не уверен, что делает их уникальными.
Ответы
Ответ 1
Вы указали type='E'
в line
data.frame. Если вы хотите иметь эту строку в типе A,B,C,D
, тогда создайте data.frame
с типами, по которым вы хотите отображать строку
xl = c( 4, 1)
yl = c( 1, 4)
type =rep(LETTERS[1:4], each=2)
line2 = data.frame(x=xl,y=yl,type)
ggplot(data, aes(x,y)) + geom_line() + facet_wrap(~type) +
geom_line(data = line2)
Вы также можете использовать annotate
, что означает, что вы не указываете data.frame, но передаете значения x и y напрямую
ggplot(data, aes(x,y)) + geom_line() + facet_wrap(~type) +
annotate(geom='line', x=xl,y=yl)
Оба создают
![enter image description here]()
Ответ 2
Вы также можете использовать geom_abline (...) следующим образом:
x <- c( 1, 3, 1, 3, 2, 4, 2, 4)
y <- c( 1, 3, 2, 4, 1, 3, 2, 4)
type <- c("A","A","B","B","C","C","D","D")
data <- data.frame(x,y,type)
int <- c(5,5,5,5)
slope <- c(-1,-1,-1,-1)
type <- c("A","B","C","D")
ref <- data.frame(int, slope, type)
ggplot(data, aes(x,y)) + geom_line() + facet_wrap(~type, scales="free") +
geom_abline(data = ref, aes(intercept=int, slope=slope), color="red", size=2)
Что это производит:
![]()