如何用Julia的Gadfly绘制指定薪资图表?代码报错排查
问题分析与解决方案
核心错误点
- 库语法混淆:你导入了
VegaLite,但写的是Gadfly的绘图语法(plot、Geom、Guide都是Gadfly专属API),两者语法不兼容,直接导致方法匹配失败报错。 - 数据列丢失:执行
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
相关产品推荐
相关产品推荐

