Bạn có thể làm điều này, nhưng rẽ cắt ra có thể có những hậu quả không mong muốn,
library(ggplot2)
df <- data.frame(y=c(1,2,3),x=1,Set=LETTERS[1:3])
p <- ggplot(df,aes(x,y)) +
theme_bw() + theme(legend.position=c(0,1),legend.justification=c(0,1)) +
geom_point(aes(fill=Set),color="black",shape=21,size=3) +
facet_grid(~Set) +
xlim(1,5)
gb <- ggplot_build(p)
g <- ggplot_gtable(gb)
library(gtable)
# ggplot2 doesn't use native units in data space
# instead, the data is rescaled to npc, i.e from 0 to 1
# so we need to use the build info to convert from data to [0,1]
ranges <- gb$layout$panel_ranges
data2npc <- function(x, range) scales::rescale(c(range, x), c(0,1))[-c(1,2)]
start <- c(data2npc(1, ranges[[1]][["x.range"]]),
data2npc(1, ranges[[1]][["y.range"]]))
end <- c(data2npc(1, ranges[[3]][["x.range"]]),
data2npc(3, ranges[[3]][["y.range"]]))
# starting position in the first panel
g <- gtable_add_grob(g, moveToGrob(start[1],start[2]),
t = 7, l = 4)
# draw line to end position in last panel
g <- gtable_add_grob(g, lineToGrob(end[1],end[2]),
t = 7, l = 8, r=8, z=Inf)
# turn clip off to see the line across panels
g$layout$clip <- "off"
grid.newpage()
grid.draw(g)
Nó có thể là hữu ích để cung cấp một số bối cảnh là tại sao nó sẽ là hữu ích để có một đường kéo dài giữa biểu đồ mặc dù các giá trị bị phá vỡ trong giá trị x. Một cách để đạt được điều này - mặc dù yêu cầu điều chỉnh thủ công - sẽ thêm điểm ngoài phạm vi xem (nghĩa là bên ngoài giới hạn trục x) khớp với vị trí của điểm đầu tiên trên bảng điều khiển tiếp theo. –
ha ha .. 'library (df)', xin lỗi về điều đó .... –
@PhilippeMarchand Nó mô tả hành vi chung giữa ba cấu hình thử nghiệm trong một bài báo mà tôi đang viết. –