我尝试构建一个放射状图,其中的一段从
2*pi
下方一直到2*pi
上方。然而,该段被删除并带有警告
Warning message:
Removed 1 row containing missing values or values outside the scale range
(`geom_line()`).
这是一个生成错误并显示一种情况的 MWE:
x=c( 0, 1, 2, 3, 4, 0, 1, 2, 3, 4.1)
y=c(10,12,17,13,10, 5, 6, 8, 7, 6)
grp = c(rep(1,5),rep(2,5))
df= data.frame(x = x, y = y, g = grp)
p1 <- ggplot(df, aes(x=x, y=y, group=g))+
geom_line() + ylim(0,18) +
coord_radial(clip="off",expand=FALSE)
p2 <- ggplot(df, aes(x=x, y=y, group=g))+
geom_line() + ylim(0,18) +
coord_radial(clip="off",expand=FALSE) + xlim(0,4)
library(gridExtra)
grid.arrange(p1,p2,ncol=2)
当我强制 x 范围从 0 到 4 时,以 4.1 结尾的最后一段被删除(我更希望看到它被截断)。我相信 (a) 大于
2*pi
的角度将以 2*pi
为模,以便线可以继续; (b) 使用 clip="off"
将允许绘制超出其正常范围的几何图形(但剪辑似乎根本不执行任何操作)。
有没有办法让geom扩展到超过2*pi? (我使用ggplot2版本3.5.1)
如果你想让线路继续超出x限制,你可以使用
scale_x_continuous(oob = scales::oob_keep)
:
library(dplyr)
library(ggplot2)
library(gridExtra)
p1 <- df |>
ggplot(aes(x=x, y=y, group=g))+
geom_line() + ylim(0,18) +
coord_radial(expand=FALSE) +
scale_x_continuous(limits = c(0, 4), oob = scales::oob_keep)
如果想要截断该行,可以在极限处插入 y 值:
p2 <- df |>
mutate(xi = pmin(x, 4),
yi = approx(x, y, xi)$y, .by = g) |>
ggplot(aes(x=xi, y=yi, group=g))+
geom_line() + ylim(0,18) +
coord_radial(expand=FALSE) +
scale_x_continuous(limits = c(0, 4))
grid.arrange(p1,p2,ncol=2)