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

时间:2016-09-07 05:41:10

标签: swift graph area ios-charts

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

尝试将两个数据集的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;
        }];

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

现在有一个快速示例,可以满足您的要求:

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

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

enter image description here