【问题标题】:Can I remove clipping from a oxyplot chart with multiple axes?我可以从具有多个轴的 oxyplot 图表中删除剪裁吗?
【发布时间】:2018-07-11 15:11:24
【问题描述】:

我有一个使用 oxyplot 库创建的带有多个 y 轴的图表。当我缩小一个 y 轴时,我注意到这条线被剪掉了。

我可以将剪切区域扩大到整个图表区域的大小吗? 可以使用图表整个区域的多轴图表在医疗数据中使用得很多。

【问题讨论】:

    标签: c# wpf oxyplot


    【解决方案1】:

    我从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);
        }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-29
      • 2013-12-22
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 2020-03-16
      相关资源
      最近更新 更多