我可以从具有多个轴的氧气图表中删除剪裁吗?

时间:2018-03-22 10:17:29

标签: c# wpf oxyplot

我有一个图表,其中包含使用oxyplot库创建的多个y轴。当我将一个y轴缩小时,我注意到该线被剪切了。 arrows indicate where the line gets clipped

我可以将剪裁区域扩展到整个图表区域的大小。 具有多个轴的图表可以使用图表的整个区域,大量使用医疗数据。

An EEG recording

1 个答案:

答案 0 :(得分:0)

我从github提取了最新的developer分支,并更改了XYAxisSeries.cs源文件中GetClippingRect()方法中的代码:

protected OxyRect GetClippingRect()
    {
        double minX,minY,maxX,maxY;
        if (this.PlotModel.AxisSizeIsClippingArea)
        {
            minX = Math.Min(this.XAxis.ScreenMin.X, this.XAxis.ScreenMax.X);
            minY = Math.Min(this.YAxis.ScreenMin.Y, this.YAxis.ScreenMax.Y);
            maxX = Math.Max(this.XAxis.ScreenMin.X, this.XAxis.ScreenMax.X);
            maxY = Math.Max(this.YAxis.ScreenMin.Y, this.YAxis.ScreenMax.Y);
        }
        else
        {
            var yAxes = this.PlotModel.Axes.Where(ax => ax.Position == AxisPosition.Left || ax.Position == AxisPosition.Right);
            var xAxes = this.PlotModel.Axes.Where(ax => ax.Position == AxisPosition.Bottom || ax.Position == AxisPosition.Top);
            maxY = yAxes.Max(ax => Math.Max(ax.ScreenMin.Y, ax.ScreenMax.Y));
            minY = yAxes.Min(ax => Math.Min(ax.ScreenMin.Y, ax.ScreenMax.Y));
            maxX = xAxes.Max(ax => Math.Max(ax.ScreenMax.X, ax.ScreenMax.X));
            minX = xAxes.Min(ax => Math.Min(ax.ScreenMin.X, ax.ScreenMin.X));
        }
        return new OxyRect(minX, minY, maxX - minX, maxY - minY);
    }

我向PlotModel添加了一个AxisSizeIsClippingArea属性,默认情况下该属性为true。如果为假,则不计算当前轴的最小值和最大值,而是计算所有轴组合的最小值和最大值。现在,当AxisSizeIsClippingArea为false时,将不再进行裁剪。