在 ScottPlot 库中,formsPlot1.Plot.Axes.AutoScale() 是一个关键方法,用于 自动调整图表的坐标轴范围,使其完美适配当前绘制的数据。它的核心功能是动态计算数据的最小/最大值,并调整 X 轴和 Y 轴的显示范围,确保所有数据点清晰可见且无裁剪。
________________________________________
功能详解
1. 核心作用
• 智能适配数据范围:
自动检测当前图表中所有数据(如折线图、散点图、条形图等)的 X 和 Y 的最小/最大值,并调整坐标轴范围,使数据完整显示。
• 一键优化显示:
无需手动计算范围,特别适用于动态数据或数据变化频繁的场景。
2. 默认行为
• 同时缩放 X 轴和 Y 轴:
除非额外配置,否则 AutoScale() 会同时调整两个坐标轴。
• 包含所有绘图对象:
影响图表中所有已添加的图形(如 Signal、Scatter、Bar 等)。
3. 常用重载方法
csharp
复制
// 基本用法:自动缩放 X 和 Y 轴
formsPlot1.Plot.Axes.AutoScale();
// 仅自动缩放 X 轴
formsPlot1.Plot.Axes.AutoScaleX();
// 仅自动缩放 Y 轴
formsPlot1.Plot.Axes.AutoScaleY();
// 指定额外的边距(padding,单位:数据坐标)
formsPlot1.Plot.Axes.AutoScale(paddingX: 0.1, paddingY: 0.2); // X/Y 轴范围增加 10%/20% 空白
________________________________________
典型使用场景
场景 1:加载新数据后自动适配
csharp
复制
// 添加新数据
double[] xs = { 1, 2, 3, 4, 5 };
double[] ys = { 10, 20, 15, 25, 30 };
formsPlot1.Plot.Add.Scatter(xs, ys);
// 自动调整坐标轴范围
formsPlot1.Plot.Axes.AutoScale();
formsPlot1.Refresh(); // 刷新显示
场景 2:动态数据更新
csharp
复制
// 动态追加数据后自动缩放
private void UpdateData(double[] newYs) {
formsPlot1.Plot.Clear();
formsPlot1.Plot.Add.Signal(newYs);
formsPlot1.Plot.Axes.AutoScale(); // 确保新数据可见
formsPlot1.Refresh();
}
场景 3:控制缩放时的边距
csharp
复制
// 自动缩放时增加 10% 的 X 轴边距和 20% 的 Y 轴边距
formsPlot1.Plot.Axes.AutoScale(paddingX: 0.1, paddingY: 0.2);
________________________________________
注意事项
1. 覆盖手动设置的轴范围
如果之前调用过 SetAxisLimits() 手动固定了坐标轴范围,AutoScale() 会覆盖这些设置。
2. 性能影响
对大数据量(如百万级数据点)频繁调用 AutoScale() 可能影响性能,建议在数据更新完成后调用。
3. 与 ZoomToFit() 的区别
o AutoScale():基于数据范围调整坐标轴。
o ZoomToFit():考虑数据 + 坐标轴标签、标题等布局元素的范围(ScottPlot 5.x 新增功能)。
4. 版本兼容性
适用于 ScottPlot 4.x 和 5.x,但在 5.x 中推荐使用 AutoScale() 的 padding 参数替代旧版的 Margins() 方法。
________________________________________
对比其他缩放方法
方法 作用 是否考虑数据 是否考虑标签布局
AutoScale() 仅按数据范围缩放 ✔️ ❌
ZoomToFit() (5.x) 数据 + 标签布局 ✔️ ✔️
SetAxisLimits() 手动固定范围 ❌ ❌
________________________________________
总结
• 何时使用:
o 数据变化后需要自动适配显示范围。
o 希望快速重置图表以显示全部数据。
• 推荐搭配:
o 在 Add 数据后调用,确保新数据可见。
o 结合 Refresh() 立即更新界面。
通过 AutoScale(),可以轻松实现“一键适配数据”的功能,避免手动计算坐标轴范围的繁琐操作。