如何使用ios图表创建区域图?

问题描述 投票:0回答:2

我正在尝试使用每个点的最小值和最大值创建一个区域图。但是没有找到任何地方。我想在两个线图之间的区域中设置背景颜色应该可以解决这个问题。

尝试将两个数据集的fillColor设置为。

.fillColor = UIColor.lightGrayColor()
.drawFilledEnabled = true

我从演示项目中看到过。它可以完成

    set1 = [[LineChartDataSet alloc] initWithValues:yVals1 label:@"DataSet 1"];
    set1.axisDependency = AxisDependencyLeft;
    [set1 setColor:[UIColor colorWithRed:255/255.0 green:241/255.0 blue:46/255.0 alpha:1.0]];
    set1.drawCirclesEnabled = NO;
    set1.lineWidth = 2.0;
    set1.circleRadius = 3.0;
    set1.fillAlpha = 1.0;
    set1.drawFilledEnabled = YES;
    set1.fillColor = UIColor.whiteColor;
    set1.highlightColor = [UIColor colorWithRed:244/255.0 green:117/255.0 blue:117/255.0 alpha:1.0];
    set1.drawCircleHoleEnabled = NO;
    set1.fillFormatter = [ChartDefaultFillFormatter withBlock:^CGFloat(id<ILineChartDataSet>  _Nonnull dataSet, id<LineChartDataProvider>  _Nonnull dataProvider) {
        return _chartView.leftAxis.axisMinimum;
    }];

    set2 = [[LineChartDataSet alloc] initWithValues:yVals2 label:@"DataSet 2"];
    set2.axisDependency = AxisDependencyLeft;
    [set2 setColor:[UIColor colorWithRed:255/255.0 green:241/255.0 blue:46/255.0 alpha:1.0]];
    set2.drawCirclesEnabled = NO;
    set2.lineWidth = 2.0;
    set2.circleRadius = 3.0;
    set2.fillAlpha = 1.0;
    set2.drawFilledEnabled = YES;
    set2.fillColor = UIColor.whiteColor;
    set2.highlightColor = [UIColor colorWithRed:244/255.0 green:117/255.0 blue:117/255.0 alpha:1.0];
    set2.drawCircleHoleEnabled = NO;
    set2.fillFormatter = [ChartDefaultFillFormatter withBlock:^CGFloat(id<ILineChartDataSet>  _Nonnull dataSet, id<LineChartDataProvider>  _Nonnull dataProvider) {
        return _chartView.leftAxis.axisMaximum;
    }];

但是我无法在swift中转换语法。

  set2.fillFormatter = [ChartDefaultFillFormatter withBlock:^CGFloat(id<ILineChartDataSet>  _Nonnull dataSet, id<LineChartDataProvider>  _Nonnull dataProvider) {
            return _chartView.leftAxis.axisMaximum;
        }];
swift graph area ios-charts
2个回答
1
投票

您不必设置fillFormatter,除非您需要调整填充行为。就我而言,Swift接口中不存在静态withBlock:。相反,你必须创建自己的ChartFillFormatter实现并实现public func getFillLinePosition(dataSet dataSet: ILineChartDataSet, dataProvider: LineChartDataProvider) -> CGFloat函数。

除了在drawFilledEnabled上设置fillColorLineChartDataSet之外,您不应该做任何其他事情,然后当然使用LineChartView

因此,如果您真的需要填充格式化程序,则必须执行以下操作:

public class MyFillFormatter: NSObject, ChartFillFormatter
{
    private let _chartView: LineChartView
    public override init(chartView: LineChartView)
    {
        super.init()
        _chartView = chartView
    }

    public func getFillLinePosition(dataSet dataSet: ILineChartDataSet, dataProvider: LineChartDataProvider) -> CGFloat
    {
        return _chartView.leftAxis.axisMaximum
    }
}

然后将其设置为:

set1.fillFormatter = MyFillFormatter(chartView: lineChartView)

0
投票

现在有一个很快的例子:

https://github.com/danielgindi/Charts/blob/master/ChartsDemo-iOS/Swift/Demos/LineChartFilledViewController.swift

在演示应用中看起来像这样:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.