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

如何在ggplot2中绘制角度对应曝光占比、半径关联利润的极坐标图?

实现结合曝光占比(角度)与利润(半径)的极坐标图表

嘿,你想要的这种图表其实就是经典的南丁格尔玫瑰图(Nightingale Rose Chart),刚好能把「曝光占比(角度)」和「利润(半径)」两个维度完美结合起来。我帮你把代码整合并优化了,直接就能用:

步骤1:准备数据并计算曝光占比

首先我们需要计算每个Group的曝光量(Count)占总曝光量的比例,用来控制极坐标中每个扇区的角度宽度:

library(ggplot2)

# 你的原始数据
mydata <- data.frame(Group=1:5, Profit=seq(60, 100, by=10), Count=seq(50000, 10000, by=-10000))

# 计算每个Group的曝光占比
mydata$count_prop <- mydata$Count / sum(mydata$Count)

步骤2:绘制目标图表

用geom_col绘制柱状图,再通过极坐标转换实现角度对应曝光占比、半径对应利润的效果:

ggplot(mydata, aes(x = Group, y = Profit, fill = Group, width = count_prop)) +
  geom_col() +
  # 保留你原来的渐变配色
  scale_fill_gradient(low="khaki", high="turquoise4") +
  # 极坐标转换:x轴对应角度,y轴对应半径,起始角度和你的饼图一致
  coord_polar(theta = "x", start = 0) +
  # 优化标题和标签,让图表更易读
  labs(
    title = "Group Profit & Exposure Distribution",
    subtitle = "Wider sector = higher exposure; Longer radius = higher profit",
    x = "Group Segment",
    y = "Profit"
  ) +
  theme_minimal()

关键参数解释

  • width = count_prop:这是实现角度对应曝光占比的核心,它让每个柱状图的宽度等于该Group的曝光占比,转换到极坐标后,宽度就对应扇区的角度。
  • coord_polar(theta = "x"):指定x轴映射为极坐标的角度,y轴映射为半径,这样Profit的大小就直接体现在扇区的半径长度上。
  • start = 0:保证起始角度和你之前的饼图一致,让图表风格统一。

这样出来的图表就完全符合你的需求:每个扇区的宽度对应该Group的曝光占比,半径对应利润大小,同时保留了你原来的配色方案~

内容的提问来源于stack exchange,提问作者Ian H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:29:34