Dundas Charting C# 列上的条件颜色规则

Posted

技术标签:

【中文标题】Dundas Charting C# 列上的条件颜色规则【英文标题】:Dundas Charting C# conditional colour rules on column 【发布时间】:2017-07-31 09:28:49 【问题描述】:

我正在使用 C# 在 Visual Studio 中使用 Dundas Charts。

我有一个包含一个系列的图表 - 图表在列上显示系列。我目前正在使用以下代码添加系列:

    public void AddSeries(string name, SeriesChartType type, IEnumerable xValues, IEnumerable yValues, bool showLabels = true)
    
        Series s = new Series();
        s.Points.DataBindXY(xValues, yValues);
        s.LegendText = name;
        s.Type = type;
        if (type == SeriesChartType.Line) s.Color = Color.FromArgb(139,0,0);
        else s.Color = _palette[_chart.Series.Count < _palette.Length ? _chart.Series.Count : 0];
        s.ShowLabelAsValue = showLabels;
        s.FontAngle = -90;
        s.LabelFormat = string.IsNullOrWhiteSpace(_chart.ChartAreas["Default"].AxisY.LabelStyle.Format) ? "P0" : _chart.ChartAreas["Default"].AxisY.LabelStyle.Format;
        s.Font = new Font("Arial", 5);

        _chart.Series.Add(s);
    

我想根据该列的值更改每列的颜色 - 这将基于一个 int 目标值。 例如,如果列小于我们的目标值,则应显示红色,否则应显示绿色。

您如何建议这样做?

【问题讨论】:

不确定 Dundas 和 MsChart 的区别;它们看起来很相似。每当标记值发生变化时,您很可能需要遍历这些点并在循环中设置每种颜色。 - 一些扩展属性,如 Tooltip 可以通过某些数据绑定方式设置,但颜色,我认为不是.. 【参考方案1】:

我已经找到了一个合适的答案,我对这个解决方案的唯一问题是列的宽度取决于 x 轴上的点数。

    void GetColourCodedSeries(ChartHelper chartHelper, DataTable table, string groupingColumn, string valueColumn)
    
        List<Color> _palette = new List<Color>();

        var x = table.AsEnumerable().Select(f => f.Field<string>(groupingColumn)).ToArray();

        foreach (DataRow row in table.Rows)
        
            if (Convert.ToDecimal(row[valueColumn].ToString()) >= _availabilityTarget) _palette.Add(Color.FromArgb(0, 176, 80));
            else _palette.Add(Color.FromArgb(139, 0, 0));

            List<decimal?> y = new List<decimal?>();

            foreach(var value in x)
            
                if (value == row[groupingColumn].ToString()) y.Add(Convert.ToDecimal(row[valueColumn].ToString()));
                else y.Add(null);
            

            chartHelper.AddSeries(SeriesChartType.Column, x, y, _palette.ToArray());
        
    

此代码根据值为列创建动态调色板。然后,我在表中每行添加一个系列,在添加系列时,我包括所有可能的 x 值和每一个 1 个 y 值 - 但是,只有一个 y 轴值具有实际值,所有其他被标记为空值(我确实尝试使用 0 值,但这使图表看起来非常混乱)。

【讨论】:

以上是关于Dundas Charting C# 列上的条件颜色规则的主要内容,如果未能解决你的问题,请参考以下文章

C# Dundas Charts 自动缩放 Y 轴,没有超过 100% 的值

Spark 以非连接列上的条件连接

sql join 与列上的多个条件

使用条件删除数据框中一列上的重复值[重复]

根据列上的条件获取记录的单个值

Postgresql 查询的过滤条件中的列上的字符串操作如何影响它选择的计划