You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

极坐标图中350°与10°间线条闭合问题求解

解决极坐标坡向频率图闭合问题

问题背景

现有一组受损及健康森林的坡向频率数据,坡向分类中点从10°到350°,绘制极坐标图时需要让350°与10°间的线条闭合,但直接复制10°数据到数据末尾后没有效果,常规方案不适用。

原数据:

DATA <- read.table( text=
"aspect     relfreq
10 0.067074037
30 0.033252807
50 0.027284354
70 0.013642177
90 0.009236891
110 0.038652835
130 0.036379139
150 0.069489839
170 0.099758420
190 0.116953247
210 0.084837289
230 0.047037090
250 0.051300270
270 0.049168680
290 0.066931931
310 0.071337218
330 0.069774051
350 0.047889726
10 0.067074037", header=TRUE )

原绘图代码:

p <- ggplot( DATA, aes( x=aspect, y=relfreq) ) +
  geom_line( color="red", size=4 ) +
  coord_polar( ) +
  scale_x_continuous( limits = c(0, 360), expand = c(0, 0), breaks = seq(0, 360-1, by = 90)) +
  ylim( 0, max( DATA$relfreq ) ) +
  xlab( NULL ) + ylab( NULL ) +
  theme_bw() +
  theme(panel.border = element_blank(),
      legend.key = element_blank(),
      axis.ticks = element_blank(),
      axis.text.y = element_blank(),
      axis.text.x = element_text( size=15 ))

当前效果:
当前绘图效果


解决方法

问题核心在于:极坐标下,直接添加10°数据时,其x值(10)小于350,ggplot会按x轴从小到大的顺序绘制,不会将350°与10°连接。需要将最后一个点的x值设为370°(即10°+360°),这样在笛卡尔坐标系中它位于350°之后,ggplot会按顺序连接350°到370°,而极坐标里370°等价于10°,从而实现图形闭合。

修改后的数据与代码

  1. 调整数据,将最后一行的10替换为370:
DATA <- read.table( text=
"aspect     relfreq
10 0.067074037
30 0.033252807
50 0.027284354
70 0.013642177
90 0.009236891
110 0.038652835
130 0.036379139
150 0.069489839
170 0.099758420
190 0.116953247
210 0.084837289
230 0.047037090
250 0.051300270
270 0.049168680
290 0.066931931
310 0.071337218
330 0.069774051
350 0.047889726
370 0.067074037", header=TRUE )
  1. 绘图代码(仅需保持x轴范围为0-360,其余可保留原设置):
p <- ggplot( DATA, aes( x=aspect, y=relfreq) ) +
  geom_line( color="red", size=4 ) +
  coord_polar( start = 0 ) +
  scale_x_continuous( limits = c(0, 360), expand = c(0, 0), 
                      breaks = seq(0, 360-1, by = 90),
                      labels = c("0°", "90°", "180°", "270°") ) +
  ylim( 0, max( DATA$relfreq ) ) +
  xlab( NULL ) + ylab( NULL ) +
  theme_bw() +
  theme(panel.border = element_blank(),
        legend.key = element_blank(),
        axis.ticks = element_blank(),
        axis.text.y = element_blank(),
        axis.text.x = element_text( size=15 ))

原理说明

极坐标是将笛卡尔坐标系的x轴绕成圆周,370°在笛卡尔x轴上处于350°之后,ggplot绘制线条时会按x值顺序连接两个点,而极坐标下370°会被映射到10°的位置,因此350°到370°的线段会在极坐标中绕回起点,实现图形的闭合。

内容的提问来源于stack exchange,提问作者Jim Worrall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:23:10