如何用C#实现Plotly.NET表格的单元格值依赖着色?
在Plotly.NET.CSharp中实现值依赖的单元格着色
可以实现值依赖的单元格着色。Plotly.NET.CSharp虽然API封装和F#版本有差异,但底层对接的是Plotly.js的配置模型,你可以通过直接为TableCells的Fill.Color传入二维颜色数组,实现逐单元格的颜色设置,无需依赖style()方法。
实现步骤与代码示例
以下是复刻官方F#示例的C#代码,通过数值区间映射不同填充色:
using System; using System.Collections.Generic; using Plotly.NET.CSharp; using Plotly.NET.CSharp.Traces; class Program { static void Main(string[] args) { // 定义表格数据 var headerValues = new List<string> { "姓名", "数学", "英语", "物理" }; var rowValues = new List<List<object>> { new List<object> { "张三", 92, 85, 78 }, new List<object> { "李四", 76, 90, 88 }, new List<object> { "王五", 88, 79, 95 } }; // 生成与数值对应的单元格颜色数组 var cellColors = new List<List<string>>(); foreach (var row in rowValues) { var rowColors = new List<string>(); foreach (var item in row) { if (item is int score) { // 根据分数区间映射颜色 rowColors.Add(score switch { >= 90 => "#76D7C4", >= 80 => "#F9E79F", _ => "#F1948A" }); } else { // 非数值单元格使用白色填充 rowColors.Add("#FFFFFF"); } } cellColors.Add(rowColors); } // 创建表格Trace并配置着色 var tableTrace = Trace2D.Table() .SetHeader(new TableHeader() .SetValues(headerValues) .SetFill(new TableFill().SetColor("#2ECC71"))) // 表头统一着色 .SetCells(new TableCells() .SetValues(rowValues) .SetFill(new TableFill().SetColor(cellColors))); // 传入颜色数组实现逐单元格着色 // 生成并展示图表 Chart2D.Chart.FromTrace(tableTrace) .Show(); } }
关键说明
- 核心逻辑是
TableFill.SetColor()方法支持接收二维字符串数组,数组中的每个元素对应表格中一个单元格的填充色,位置与表格数据严格对应。 - 若需要渐变色彩(而非区间色),可以通过数值归一化后计算RGB值生成渐变颜色数组,比如将0-100的分数映射从红色到绿色的渐变。
- 确保颜色数组的维度和表格数据完全匹配,避免渲染异常。
内容的提问来源于stack exchange,提问作者GetFuzzy
相关产品推荐
相关产品推荐

