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

非数值轴数据集绘图:用DataFrames与Gadfly绘制水平堆叠条形图

实现水平堆叠条形图的解决方案

嘿,要画出你想要的水平堆叠条形图,咱们得先调整数据格式,再利用Gadfly的堆叠参数来实现。我一步步给你拆解:

1. 先处理数据格式(关键步骤)

Gadfly的堆叠条形图更适配**长格式(long-form)**的数据,而你当前的CSV是宽格式。咱们需要把它转成长格式,这样Gadfly才能正确识别不同年份的分组并堆叠。

首先注意:Julia新版本里readtable已经被废弃了,现在推荐用CSV.jl来读取文件,先确保你安装了相关包:

using Pkg
Pkg.add(["DataFrames", "Gadfly", "CSV"])

然后读取并转换数据:

using DataFrames, Gadfly, CSV

# 读取CSV文件
df = DataFrame(CSV.File("a.csv"))

# 将宽格式转成长格式:把2017、2018列转为Year列,对应值放到Value列
df_long = stack(df, [:2017, :2018], variable_name=:Year, value_name=:Value)

转换后的长数据结构是这样的,方便Gadfly处理:

NameYearValue
Alice201712
Bob201711
Alice201815
Bob201810

2. 绘制水平堆叠条形图

用转换后的长数据绘图,设置堆叠模式和水平方向:

plot(df_long, 
     y=:Name,               # Y轴显示姓名(Alice、Bob)
     x=:Value,              # X轴对应数值
     color=:Year,           # 用颜色区分2017和2018的分段
     Geom.bar(position=:stack, orientation=:horizontal), # 堆叠+水平条形
     Guide.xlabel("数值"),
     Guide.ylabel("姓名"),
     Guide.title("2017-2018年数值堆叠条形图")
)

这样就能得到你想要的效果:每个姓名对应一条水平条形,由2017和2018的数值段堆叠而成,X轴显示累计数值,颜色区分不同年份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:22:08