非数值轴数据集绘图:用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处理:
| Name | Year | Value |
|---|---|---|
| Alice | 2017 | 12 |
| Bob | 2017 | 11 |
| Alice | 2018 | 15 |
| Bob | 2018 | 10 |
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
相关产品推荐
相关产品推荐

