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

如何为OxyPlot热图的LinearColorAxis设置最大刻度值

解决OxyPlot 2.0热图共享颜色刻度并固定最大值的问题

问题根源

OxyPlot的LinearColorAxis默认开启AutoAdjustRange=true,渲染前会自动遍历关联热图的数据集计算颜色范围,覆盖你手动设置的最大值。要让自定义刻度生效,必须关闭自动范围调整,并显式关联热图到目标颜色轴。

具体解决方案

  1. 创建共享颜色轴并关闭自动调整
    显式设置颜色轴的固定最小值、用户指定最大值,关键是关闭AutoAdjustRange,同时给轴设置唯一Key方便关联:

    var sharedColorAxis = new LinearColorAxis
    {
        Key = "SharedHeatMapColorAxis",
        Minimum = 0, // 固定最小值为0
        Maximum = 用户指定的最大值,
        AutoAdjustRange = false, // 禁用自动范围计算,核心设置
        IsZoomEnabled = false,
        IsPanEnabled = false,
        Position = AxisPosition.Right // 可根据布局调整位置
        // 可添加颜色映射等样式设置,例如 ColorMap = OxyPalettes.Jet(256)
    };
    plotModel.Axes.Add(sharedColorAxis);
    
  2. 修改热图系列,显式关联共享颜色轴
    给每个热图系列指定ColorAxisKey,确保它们都使用同一个颜色刻度,避免自动关联可能的不确定性:

    var hs = new HeatMapSeries
    {
        Data = zData,
        XAxisKey = xAxisKey,
        YAxisKey = "logy",
        ColorAxisKey = "SharedHeatMapColorAxis", // 绑定到共享颜色轴
        X0 = _linearX[0],
        X1 = _linearX[_linearX.Length - 1],
        Y0 = _linearY[0],
        Y1 = _linearY[_linearY.Length - 1],
        TrackerFormatString = trackerFormatString,
        Tag = "heatmap",
    };
    
  3. 用户锁定刻度时更新最大值并触发重绘
    当用户修改最大值后,更新颜色轴的Maximum,并调用InvalidatePlot通知图表重绘:

    // 从PlotModel中获取共享颜色轴
    var colorAxis = plotModel.Axes.FirstOrDefault(a => a.Key == "SharedHeatMapColorAxis") as LinearColorAxis;
    if (colorAxis != null)
    {
        colorAxis.Maximum = 用户新指定的最大值;
        colorAxis.AutoAdjustRange = false; // 再次确保禁用自动调整
        plotModel.InvalidatePlot(true); // 触发图表重绘,应用新设置
    }
    

注意事项

  • 所有需要共享刻度的热图必须指定同一个ColorAxisKey,否则会自动创建独立的颜色轴。
  • 如果后续需要恢复自动调整范围,只需将AutoAdjustRange设回true即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:24:57