在 ggplot 中的极坐标图上缩放 "y" 轴

scale "y" axis on a polar plot in ggplot

我正在尝试限制 ggplot 中极坐标图的“y”轴(即半径)。我的数据应该在0到90之间。应该很简单,但我不明白哪里出了问题:

foo <- tibble(theta=c(0,10,20),r=c(10,30,90))

foo %>% ggplot()+
  geom_point(aes(x=theta,y=r))+
  coord_polar()+
  scale_y_continuous(limits=c(0,90),expand=c(0,0),breaks=90)+
  scale_x_continuous(limits=c(0,360),expand=c(0,0),breaks=c(0,90,180,270))+
  theme(panel.grid.minor = element_blank(),
        panel.grid.major.y = element_line(colour="red"))

如您所见,情节扩展到 100 而不是 90。此外,我有两个圆圈对应于主要的网格元素,一个在 90 处根据需要,一个在 100 处。我添加了“主题”语句来演示它确实对应于一条主线。另一方面,X 数据根据需要适当缩放并“停止”在 360。

如何强制我的图形从 0 缩放到 90,并在 100 处删除这个圆圈?

谢谢!

我认为这是一个小错误,或者至少是一个缺失的功能(可以通过 coord_cartesian 中的 ylim 设置硬限制来防止笛卡尔 co-ordinates 中的等效行为,在 coord_polar 中不可用)。 coord_polar中没有外轴线,似乎用网格线取而代之,不尊重axis.line主题元素。

我能找到的唯一解决方法有点“hacky”,因为您可以将矢量化颜色传递给网格线:

foo %>% 
  ggplot() +
  geom_point(aes(x = theta, y = r)) +
  coord_polar(clip = "off") +
  scale_y_continuous(limits = c(0, 90), expand = c(0, 0),  breaks = 90) +
  scale_x_continuous(limits = c(0, 360), expand = c(0, 0), 
                     breaks = c(0, 90, 180, 270)) +
  theme(panel.grid.minor   = element_blank(),
        panel.grid.major.y = element_line(colour = c("red", NA)))