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

如何用Julia的Gadfly绘制指定薪资图表?代码报错排查

问题分析与解决方案

核心错误点

  1. 库语法混淆:你导入了VegaLite,但写的是Gadfly的绘图语法(plot、Geom、Guide都是Gadfly专属API),两者语法不兼容,直接导致方法匹配失败报错。
  2. 数据列丢失:执行select!(new,:job_title,:salary_in_usd,:work_year)时删掉了experience_level列,后续绘图需要用该列着色,会触发列不存在的隐性问题。

修正后的完整流程

第一步:修复数据处理代码

保留绘图必需的experience_level列,修改select!语句:

import Downloads 
using DLMReader, VegaLite, InMemoryDatasets 

data = Downloads.download("https://raw.githubusercontent.com/akshdfyehd/salary/main/ds_salaries.csv") 
ds = filereader(data, emptycolname=true) 
new = filter(ds, :employment_type, by= ==("FT")) 
# 保留所有绘图需要的列
select!(new, :job_title, :salary_in_usd, :work_year, :experience_level)

第二步:绘制第一张图表(X: salary_in_usd,Y: job_title,按experience_level着色)

使用VegaLite的@vlplot宏实现水平堆叠条形图:

palette = ["brown", "blue", "tan", "green"]

new |> @vlplot(
    mark={:bar, orient="horizontal"},
    x={:salary_in_usd, title="Salary (USD)"},
    y={:job_title, title="Job Title"},
    color={:experience_level, title="Experience Level", scale={range=palette}},
    title="Salary Distribution by Job Title and Experience Level"
)

第三步:绘制第二张图表(按work_year分组,Y: job_title,X: salary_in_usd,按experience_level着色)

通过column参数实现按work_year分面分组:

new |> @vlplot(
    mark={:bar, orient="horizontal"},
    x={:salary_in_usd, title="Salary (USD)"},
    y={:job_title, title="Job Title"},
    color={:experience_level, title="Experience Level", scale={range=palette}},
    column={:work_year, title="Work Year", spacing=20},
    title="Salary Distribution by Job Title, Experience Level and Work Year"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:35:23