如何在Julia中创建百分比堆叠条形图(Percentage stacked barplot)
在Julia中实现百分比堆叠条形图
用户希望在Julia中创建类似R语言的百分比堆叠条形图,以下是R语言的实现代码:
set.seed(7) data <- matrix(sample(1:30,6), nrow=3) colnames(data) <- c("A","B") rownames(data) <- c("V1","V2","V3") library(RColorBrewer) cols <- brewer.pal(3, "Pastel1") df_percentage <- apply(data, 2, function(x){x*100/sum(x,na.rm=T)}) barplot(df_percentage, col=cols, border="white", xlab="group")
用户已尝试在Julia中实现,但仅完成了百分比坐标轴设置,未实现每个条形按百分比占比堆叠的效果,尝试代码如下:
using StatsPlots measles = [38556, 24472] mumps = [20178, 23536] chickenPox = [37140, 32169] ticklabel = ["A", "B"] foo = @. measles + mumps + chickenPox my_range = LinRange(0, maximum(foo), 11) groupedbar( [measles mumps chickenPox], bar_position = :stack, bar_width=0.7, xticks=(1:2, ticklabel), yticks=(my_range, 0:10:100), label=["measles" "mumps" "chickenPox"] )
需要调整代码以实现和R一致的百分比堆叠条形图效果。
解决方案
核心思路是先将每个类别的数值转换为对应组的百分比(和R代码逻辑对齐),再绘制堆叠条形图:
using StatsPlots # 原始数据 measles = [38556, 24472] mumps = [20178, 23536] chickenPox = [37140, 32169] ticklabel = ["A", "B"] # 计算每个组的总数值 group_totals = measles .+ mumps .+ chickenPox # 将每个类别转换为对应组的百分比 measles_pct = measles ./ group_totals .* 100 mumps_pct = mumps ./ group_totals .* 100 chickenPox_pct = chickenPox ./ group_totals .* 100 # 绘制百分比堆叠条形图 groupedbar( [measles_pct mumps_pct chickenPox_pct], bar_position = :stack, bar_width = 0.7, xticks = (1:2, ticklabel), yticks = 0:10:100, ylabel = "百分比", xlabel = "组别", label = ["measles" "mumps" "chickenPox"], bordercolor = :white, # 移除条形边框,匹配R效果 palette = :Pastel1 # 使用Pastel1配色,匹配R的ColorBrewer效果 )
关键调整说明:
- 数据转换:先计算每个组的总和,再将每个类别数值转换为该组的百分比,确保每个堆叠条形总高度为100%
- 配色与边框:通过
palette = :Pastel1和bordercolor = :white匹配R代码的视觉效果 - 坐标轴设置:直接使用百分比刻度(
0:10:100),无需映射原始数值
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

