一、Plotly.NET 核心特性与优势
1. 为什么选择 Plotly.NET?
特性 | 描述 |
---|---|
丰富图表类型 | 支持折线图、柱状图、散点图、热力图、饼图等 30+ 类型 |
跨平台支持 | 兼容 .NET Framework、.NET Core、.NET 5+ 及 .NET MAUI |
交互式体验 | 鼠标悬停提示、缩放平移、图例切换等交互功能 |
多语言适配 | 提供 Plotly.NET.CSharp 包,符合 C# 语言习惯 |
开源生态 | GitHub Star 超 2k,活跃社区提供持续更新 |
二、安装与基础配置
1. 安装 Plotly.NET
# 使用 NuGet 安装核心包(推荐)
dotnet add package Plotly.NET
dotnet add package Plotly.NET.CSharp # C# 风格 API
dotnet add package Plotly.NET.ImageExport # 静态图像导出
2. 初始化代码模板
using Plotly.NET;
using Plotly.NET.LayoutObjects;
// 创建数据集
var xValues = new double[] { 1, 2, 3, 4, 5 };
var yValues = new double[] { 2, 4, 6, 8, 10 };
// 创建折线图
var trace = new Scatter()
{
x = xValues,
y = yValues,
Mode = "lines+markers", // 显示线条和数据点
Name = "线性增长", // 图例名称
Line = new Line()
{
Color = "rgb(255, 0, 0)", // 设置线条颜色
Width = 2 // 设置线条宽度
}
};
// 设置图表布局
var layout = new Layout()
{
Title = "简单折线图示例", // 图表标题
XAxis = new XAxis()
{
Title = "X 轴", // X 轴标签
ShowGrid = true // 显示网格线
},
YAxis = new YAxis()
{
Title = "Y 轴", // Y 轴标签
Range = new double[] { 0, 12 } // Y 轴范围
}
};
// 生成图表并展示
var chart = Chart2D.Chart.Line(trace, layout);
chart.Show(); // 默认在浏览器中打开 HTML 文件
三、核心功能详解
1. 折线图与散点图
// 创建散点图
var scatterTrace = new Scatter()
{
x = new double[] { 10, 20, 30, 40 },
y = new double[] { 15, 30, 25, 45 },
Mode = "markers", // 仅显示数据点
Marker = new Marker()
{
Size = 10,
Color = "blue",
Opacity = 0.7 // 设置透明度
}
};
// 生成散点图
var scatterChart = Chart2D.Chart.Scatter(scatterTrace, layout);
scatterChart.Show();
2. 柱状图与堆叠图
// 创建柱状图
var barTrace1 = new Bar()
{
x = new string[] { "A", "B", "C" },
y = new double[] { 10, 20, 30 },
Name = "类别1"
};
var barTrace2 = new Bar()
{
x = new string[] { "A", "B", "C" },
y = new double[] { 15, 25, 35 },
Name = "类别2"
};
// 设置堆叠布局
var stackedLayout = new Layout()
{
Title = "堆叠柱状图",
Barmode = "stack" // 关键配置:堆叠模式
};
// 生成堆叠柱状图
var stackedChart = Chart2D.Chart.Bar(new[] { barTrace1, barTrace2 }, stackedLayout);
stackedChart.Show();
3. 热力图与等高线图
// 创建热力图
var heatmapZ = new[,]
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
var heatmapTrace = new Heatmap()
{
z = heatmapZ,
Colorscale = "Viridis" // 使用 Viridis 色谱
};
// 生成热力图
var heatmapChart = Chart2D.Chart.Heatmap(heatmapTrace, layout);
heatmapChart.Show();
四、高级功能与优化技巧
1. 交互式图表优化
// 添加动态更新功能
var dynamicChart = Chart2D.Chart.Line(trace, layout)
.WithConfig(new Config()
{
Responsive = true, // 自适应窗口大小
DisplayModeBar = true // 显示工具栏
});
dynamicChart.Show();
2. 静态图像导出
// 导出为 PNG 图像
var imageExporter = new ImageExport.ImageExport();
imageExporter.ExportPNG(chart, "output.png",
width: 800,
height: 600,
scale: 2); // 设置分辨率倍数
3. Web 应用集成
// 在 ASP.NET Core 中返回 HTML 图表
public IActionResult GetChart()
{
var chartHtml = chart.ToHtml(); // 将图表转换为 HTML 字符串
return Content(chartHtml, "text/html");
}
五、常见问题与解决方案
1. 图表显示空白?
原因:数据类型不匹配或未正确绑定。
解决:
// 确保数据类型一致
var x = new List<double> { 1.0, 2.0, 3.0 }; // 使用 double 类型
var y = new List<int> { 10, 20, 30 }; // 保持数值类型统一
2. 如何调整图表大小?
方法:通过 layout.Width
和 layout.Height
配置:
var layout = new Layout()
{
Width = 800, // 设置宽度
Height = 600 // 设置高度
};
3. 图表样式混乱?
技巧:使用 Style
方法统一设置主题:
chart = chart.Style(
Font = new Font() { Family = "Arial", Size = 14 }, // 设置字体
TitleFont = new Font() { Size = 20 } // 设置标题字体
);
六、真实业务场景应用
1. 销售数据分析
// 模拟季度销售数据
var salesData = new Dictionary<string, double>
{
{ "Q1", 120 },
{ "Q2", 180 },
{ "Q3", 200 },
{ "Q4", 250 }
};
var barTrace = new Bar()
{
x = salesData.Keys.ToArray(),
y = salesData.Values.ToArray(),
Marker = new Marker() { Color = "teal" }
};
var layout = new Layout()
{
Title = "年度销售趋势",
XAxis = new XAxis() { Title = "季度" },
YAxis = new YAxis() { Title = "销售额(万元)" }
};
var salesChart = Chart2D.Chart.Bar(barTrace, layout);
salesChart.Show();
2. 实时监控仪表盘
// 动态更新数据流
public void UpdateDashboard(double newValue)
{
var updatedTrace = new Scatter()
{
x = xValues.Append(newValue).ToArray(),
y = yValues.Append(newValue * 2).ToArray()
};
var updatedChart = Chart2D.Chart.Line(updatedTrace, layout);
updatedChart.Show(); // 实时刷新
}
七、性能优化与最佳实践
1. 批量数据处理
// 使用数组代替集合提升性能
double[] largeX = new double[10000];
double[] largeY = new double[10000];
for (int i = 0; i < 10000; i++)
{
largeX[i] = i;
largeY[i] = Math.Sin(i * 0.1);
}
var bigDataTrace = new Scatter()
{
x = largeX,
y = largeY,
Mode = "lines"
};
var bigDataChart = Chart2D.Chart.Line(bigDataTrace, layout);
bigDataChart.Show();
2. 内存管理
// 及时释放无用资源
chart.Dispose(); // 显式释放图表对象
通过本文的实战演练,你已掌握:
✅ Plotly.NET 的完整安装与配置流程
✅ 折线图、柱状图、热力图等核心图表的创建方法
✅ 交互式图表优化与静态导出技巧
✅ Web 应用集成与性能调优方案