具有共享轴的用户控件
本页介绍如何使用两个共享轴的用户控件,以便在一个平移时,另一个自动平移。本例将展示Windows窗体,但所有ScottPlot控件的技术都是相同的。
Windows Forms
- 将绘图存储在类级别的数组中
- 将自定义函数添加到
AxesChanged
事件处理程序 - 触发事件后,更新所有打印的轴限制并请求渲染
- 临时禁用轴更改事件,同时更改其他绘图的轴,以避免无限循环
readonly FormsPlot[] FormsPlots;
public LinkedPlots()
{
InitializeComponent();
// plot sample data
formsPlot1.Plot.AddSignal(DataGen.Sin(51));
formsPlot2.Plot.AddSignal(DataGen.Cos(51));
// populate array of plots for easy iteration later
FormsPlots = new FormsPlot[] { formsPlot1, formsPlot2 };
foreach (var fp in FormsPlots)
fp.AxesChanged += OnAxesChanged;
}
private void OnAxesChanged(object sender, EventArgs e)
{
FormsPlot changedPlot = (FormsPlot)sender;
var newAxisLimits = changedPlot.Plot.GetAxisLimits();
foreach (var fp in FormsPlots)
{
if (fp == changedPlot)
continue;
// disable events briefly to avoid an infinite loop
fp.Configuration.AxesChangedEventEnabled = false;
fp.Plot.SetAxisLimits(newAxisLimits);
fp.Render();
fp.Configuration.AxesChangedEventEnabled = true;
}
}
匹配布局
axis会根据字体大小和刻度标签内容自动确定其最佳大小,但希望在多个控件中排列布局的用户将需要手动定义axis大小。通过将“最小大小”和“最大大小”设置为相同的数字,可以强制该轴为固定大小。
自动轴尺寸 | 固定轴尺寸 |
---|---|
![]() |
![]() |
// plot sample data with greatly different Y scales
Random rand = new Random(0);
double[] ysSmall = DataGen.RandomWalk(1000, 1);
double[] ysBig = DataGen.RandomWalk(1000, 1e6);
formsPlot1.Plot.AddSignal(ysSmall, color: Color.Red);
formsPlot2.Plot.AddSignal(ysBig, color: Color.Blue);
// configure the left axis to always be 70 pixels wide
formsPlot1.Plot.YAxis.SetSizeLimit(min: 70, max: 70);
formsPlot2.Plot.YAxis.SetSizeLimit(min: 70, max: 70);