具有共享轴的用户控件

本页介绍如何使用两个共享轴的用户控件,以便在一个平移时,另一个自动平移。本例将展示Windows窗体,但所有ScottPlot控件的技术都是相同的。

Windows Forms

从GitHub下载这个例子

  • 将绘图存储在类级别的数组中
  • 将自定义函数添加到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大小。通过将“最小大小”和“最大大小”设置为相同的数字,可以强制该轴为固定大小。

自动轴尺寸 固定轴尺寸

从GitHub下载这个例子

// 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);