如何在Julia中为各JOB类别绘制Pie Gauge Chart(环形仪表盘)
在Julia中实现环形仪表盘(Pie Gauge Chart)
1. 加载依赖包
先安装并加载所需工具包,Plots负责绘图,DataFrames用于数据格式转换:
using Plots, DataFrames gr() # 选用GR后端,渲染稳定且适配极坐标需求
2. 数据预处理
将你提供的宽格式数据转换为长格式,方便批量处理每个JOB类别的进度数据:
# 构造原始数据集 raw_data = DataFrame( BR = ["BR1", "BR2", "BR3"], PROG_JOB1 = [0.5, 0.3, 0.6], PROG_JOB2 = [0.4, 0.2, 0.5], PROG_JOB3 = [0.5, 0.6, 0.3] ) # 转长格式,便于遍历每个BR-JOB组合 long_data = stack(raw_data, Not(:BR), variable_name=:Job, value_name=:Progress)
3. 定义环形仪表盘绘制函数
基于极坐标投影实现核心绘制逻辑,通过分段条形图模拟环形进度:
function draw_pie_gauge(progress::Float64, title::String; progress_color=:steelblue, bg_color=:lightgray) # 计算进度对应的角度范围(0到2π*进度占比) progress_angle = 2π * progress # 背景环形对应的剩余角度 bg_angle = 2π - progress_angle # 极坐标下绘制条形图,bar_width控制环形厚度 gauge_plot = bar( [0, progress_angle], [1, 1], proj=:polar, bar_width=1, color=[bg_color, progress_color], legend=false, title=title, titlefontsize=10 ) # 隐藏冗余坐标轴与刻度,只保留环形视觉 xticks!(gauge_plot, []) yticks!(gauge_plot, []) ylims!(gauge_plot, 0, 2) # 控制环形整体大小 return gauge_plot end
4. 批量生成并排列仪表盘
遍历所有BR和JOB组合,生成子图并排列成网格布局:
# 获取所有唯一的BR和JOB标识 unique_brs = unique(long_data.BR) unique_jobs = unique(long_data.Job) # 创建网格布局,行数对应BR数量,列数对应JOB数量 plot_layout = @layout [grid(length(unique_brs), length(unique_jobs))] final_plot = plot(layout=plot_layout, size=(800, 600)) # 逐个绘制仪表盘并添加到子图 for (row_idx, br) in enumerate(unique_brs) for (col_idx, job) in enumerate(unique_jobs) # 提取当前组合的进度值 current_progress = long_data[(long_data.BR .== br) .& (long_data.Job .== job), :Progress][1] # 设置子图标题,显示进度百分比 subplot_title = "$br - $job\n进度: $(round(current_progress*100))%" # 生成仪表盘并添加到对应子图位置 gauge = draw_pie_gauge(current_progress, subplot_title) plot!(final_plot[row_idx, col_idx], gauge) end end # 展示最终绘图结果 display(final_plot)
自定义说明
- 可通过调整
bar_width参数改变环形的厚度 - 修改
progress_color和bg_color参数自定义进度条与背景的颜色 - 布局可根据需求调整,比如改为
grid(1, length(unique_jobs))实现横向排列
内容的提问来源于stack exchange,提问作者GoFORIT
相关产品推荐
相关产品推荐

