如何在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
相关产品推荐
相关产品推荐

