R coord_polar 删除一段

问题描述 投票:0回答:1

我尝试构建一个放射状图,其中的一段从

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)

two radial plots with the one on the right missing a segment

当我强制 x 范围从 0 到 4 时,以 4.1 结尾的最后一段被删除(我更希望看到它被截断)。我相信 (a) 大于

2*pi
的角度将以
2*pi
为模,以便线可以继续; (b) 使用
clip="off"
将允许绘制超出其正常范围的几何图形(但剪辑似乎根本不执行任何操作)。

有没有办法让geom扩展到超过2*pi? (我使用ggplot2版本3.5.1)

r ggplot2 polar-coordinates
1个回答
0
投票

如果你想让线路继续超出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)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.