iOS-Charts在圆圈下方绘制值

时间:2017-08-08 01:09:01

标签: ios objective-c ios-charts

我正在使用Daniel Gindi的图表。在正常情况下,值在圆圈之上;

values above the circles

1-但是当标签没有足够的空间(由于线条)时,我需要将值/标签下拉到圆圈下方

2-我需要在圆和标签/值之间给出额外的偏移。

3-我只需要在第一个和最后一个值上显示圆圈。

我使用 valueFormatter 进行数据集委托。我可以用

来达到它
-(NSString *)stringForValue:(double)value entry:(ChartDataEntry *)entry 
dataSetIndex:(NSInteger)dataSetIndex viewPortHandler:
(ChartViewPortHandler *)viewPortHandler{
if (entry.x==0||entry.x==myArray.count-1) {
    NSInteger index = [NSNumber numberWithDouble:value].integerValue;
    return [NSString stringWithFormat:@"%ld",(long)index];
} else {
    return @"";
}

但我不知道该怎么做。

提前致谢。

2 个答案:

答案 0 :(得分:1)

可能是您可以使用线图作为3.question。如果你从github下载ChartDemo应用程序,找到LineChart1ViewController.m并更改 - (void)setDataCount:(int)count range:(double)range方法内容用这个

- (void)setDataCount:(int)count range:(double)range {
NSMutableArray *values = [[NSMutableArray alloc] init];

for (int i = 0; i < count; i++)
{
    double val = arc4random_uniform(range) + 3;
    if(i == 0 || i == count - 1)
        [values addObject:[[ChartDataEntry alloc] initWithX:i y:val icon: [UIImage imageNamed:@"icon"]]];
    else
        [values addObject:[[ChartDataEntry alloc] initWithX:i y:val icon: [UIImage imageNamed:@""]]];
}

LineChartDataSet *set1 = nil;
if (_chartView.data.dataSetCount > 0)
{
    set1 = (LineChartDataSet *)_chartView.data.dataSets[0];
    set1.values = values;
    [_chartView.data notifyDataChanged];
    [_chartView notifyDataSetChanged];
}
else
{
    set1 = [[LineChartDataSet alloc] initWithValues:values label:@"DataSet 1"];

    set1.drawIconsEnabled = YES;

    set1.lineDashLengths = @[@5.f, @2.5f];
    set1.highlightLineDashLengths = @[@5.f, @2.5f];
    [set1 setColor:UIColor.blackColor];
    [set1 setCircleColor:UIColor.blackColor];
    set1.lineWidth = 1.0;
    set1.circleRadius = 0.0;
    set1.drawCircleHoleEnabled = NO;
    set1.valueFont = [UIFont systemFontOfSize:9.f];
    set1.formLineDashLengths = @[@5.f, @2.5f];
    set1.formLineWidth = 1.0;
    set1.formSize = 15.0;

    NSArray *gradientColors = @[
                                (id)[ChartColorTemplates colorFromString:@"#00ff0000"].CGColor,
                                (id)[ChartColorTemplates colorFromString:@"#ffff0000"].CGColor
                                ];
    CGGradientRef gradient = CGGradientCreateWithColors(nil, (CFArrayRef)gradientColors, nil);

    set1.fillAlpha = 1.f;
    set1.fill = [ChartFill fillWithLinearGradient:gradient angle:90.f];
    set1.drawFilledEnabled = YES;

    CGGradientRelease(gradient);

    NSMutableArray *dataSets = [[NSMutableArray alloc] init];
    [dataSets addObject:set1];

    LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets];

    _chartView.data = data;}}

我的意思是你可以在设置0.0f圆半径后使用(自定义看起来像圆圈等)图标作为第一个和最后一个圆圈。它看起来像这样

enter image description here

玩得开心:)

答案 1 :(得分:0)

1和2 - Change position of labels to be inside data set circles您可以对项目的解决方案进行基本更改。

3-对不起,但它对于折线图上的所有值都是通用的。但您可以使用组合图表来解决此问题。对于第一个和最后一个值,使用bubble - 对于值之间使用折线图,这就是全部。

Goodluck:)