在不使用极坐标的情况下向ggplot添加极地背景

时间:2018-08-03 20:37:34

标签: r ggplot2 ggproto ggforce

我想用笛卡尔坐标系作图,但随后将其覆盖在极坐标图背景上,就像coord_polar产生的那样。 Panel.background中的theme.R仅具有element_rect;理想情况下,我可以使用类似element_polar之类的东西。

有什么办法吗?

仅使用coord_polar是行不通的,因为我还绘制了其他特殊映射到coord_polar的几何图形(例如,来自geom_ellispis包的ggforce) 。

可复制的示例代码:

library(ggplot2)
library(ggforce) # NB this is the github version #install_github("thomasp85/ggforce"). Includes 'geom_ellipsis'


#### Make example data
r<-runif(50,-100,100)    # radial coordinates
theta<-runif(50,0,2)     # theta

a<-runif(50,1,20)
b<-runif(50,1,20)

# Convert r and theta to cartesian:
x<-r*cos(theta*pi)    # x-coordinate of ellipse foci
y<-r*sin(theta*pi)    # y-coordinate of ellipse foci

angle.random<-runif(50,min=0,max=2) # random angle for ellipsis rotation

df<-as.data.frame(cbind(r,theta,x,y,a,b,angle.random))

# Make plots

# Plot should look like this:
ggplot(df,aes(x,y))+
  geom_point(aes(x,y))+
  geom_ellipsis(data=df,aes(x0=x,y0=y,a=a,b=b,angle=angle.random,fill=T))

geom_ellipsis plot on cartesian coordinates

# But I want the panel background in polar coordinates (and auto-adjusing to scale), like this:
ggplot(df,aes(x,y))+
  geom_point(aes(x,y))+
  coord_polar()

Polar coordinates

# However, using geom_ellipsis (among other functions) has idiosyncratic effects in non-cartesian coordinate systems:
ggplot(df,aes(r,theta))+
  geom_point(aes(x,y))+
  geom_ellipsis(data=df,aes(x0=x,y0=y,a=a,b=b,angle=angle.random,fill=T))+
  coord_polar()

geom_ellipsis on coord_polar is distorted

我想要第三张图的极地背景,以及第一张图的椭圆形。有什么办法吗?

0 个答案:

没有答案