Julia Gadfly添加color美学属性后free_y_axis参数失效问题求助
问题原因
Gadfly中如果将color美学参数定义在plot的全局参数层级,库会默认统一所有子图的数值范围来适配全局颜色映射的堆叠计算逻辑,导致free_y_axis=true配置被覆盖失效。
解决方案
将颜色映射从全局参数移到子图几何对象内部,同时手动指定全局颜色映射规则,保证各分面的颜色逻辑一致,修改后的代码如下:
using Gadfly using DataFrames using Colors # 预定义product到颜色的映射,保证所有分面颜色统一 product_color_map = Dict( "lemon_pie" => colorant"gold", "brownie" => colorant"saddlebrown" ) plot(flow, ygroup=:rawmat_type, x=:period, y=:quantity, Geom.subplot_grid( Geom.bar(position=:stack, color=:product), # 颜色映射放到子图的几何层内 free_y_axis=true ), Theme(background_color="white", bar_spacing=2mm, key_title_font_size=9pt), # 全局指定颜色刻度,避免不同子图出现颜色映射不一致的问题 Scale.color_discrete_manual(values=[product_color_map[p] for p in unique(flow.product)]), Scale.y_continuous(format=:plain))
如果上述方案仍不符合需求,可使用gridstack接口手动拼接多个独立绘制的子图,这种方式可以完全自定义每个分面的轴范围,同时可以手动生成统一的全局图例。
内容的提问来源于stack exchange,提问作者Aina
相关产品推荐
相关产品推荐

