c# - 我可以从具有多个轴的 oxyplot 图表中删除裁剪吗?

标签 c# wpf oxyplot

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

我可以将裁剪区域扩大到整个图表的区域大小吗? 可以使用图表的整个区域的多轴图表经常用于医疗数据。

An EEG recording

最佳答案

我从github拉取了最新的develop分支,修改了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);
    }

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

关于c# - 我可以从具有多个轴的 oxyplot 图表中删除裁剪吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49426013/

相关文章:

c# - 将 View 模型转换为 View

c# - 如何使用 LinqToSql 查询特定日期时间

c# - 将 datarow[] 转换为 List<int> 的最佳方法是什么?

c# - 尝试在循环中设置 CategoryIndex 时出现 IndexOutOfRangeException

keyboard - oxyplot 中已经实现了哪些键盘快捷键功能?

c# - 如何将对象转换为其实际类型

c# - 验证与焦点丢失

c# - 当用户在 ComboBox 中进行选择时,如何更新我的 DataGrid?

wpf - IDataErrorInfo - 即使收到一条错误消息,也看不到任何错误消息

c# - 如何在 OxyPlot 中绘制自定义函数的图形?