2017-08-08 4 views
1

J'utilise les graphiques de Daniel Gindi. En normal, les valeurs sont au-dessus des cercles;iOS-Charts dessin des valeurs ci-dessous cercle

values above the circles

1- Mais je dois tirer vers le bas les valeurs/étiquettes au-dessous des cercles, lorsqu'il n'y a pas assez d'espace pour l'étiquette (à cause de lignes)

2- Je dois donner supplémentaires décalage entre cercle et étiquette/valeur.

3- Je dois montrer un cercle uniquement sur les première et dernière valeurs.

J'utilise valueFormatter pour le délégué dataset. Je peux l'atteindre avec

-(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 @""; 
} 

Mais je ne sais pas quoi faire.

Merci d'avance.

+0

Pouvez-vous poster le code pour les étiquettes? –

+0

ok, a mis à jour le code @JohnnyRockex – David

+0

Peut-on voir le code qui dessine les étiquettes eux-mêmes? –

Répondre

1

peut être vous pouvez utiliser LineChart pour votre 3.question. Si vous téléchargez l'application ChartDemo de GitHub, trouver LineChart1ViewController.m et le changement - (void) setDataCount: (int) Plage de comptage: (double) contenu méthode de gamme avec ce

- (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;}} 

Je veux dire que vous pouvez utiliser (sur mesure ressemble cercle ou etc.) pour le premier et le dernier cercle après le réglage du rayon du cercle de 0.0f. Il ressemblera à ceci

enter image description here

vous amuser :)

+0

cela a fonctionné !! merci :) savez-vous comment définir attributeString pour le texte de valeur de données? – David

+0

ça sonne bien :) à propos de attributeString, je suis désolé, il y a valueFont, valueTextColor, valueFormatter propriétés sur LineChartDataSet et aucun d'entre eux sont utilisés pour attributeString. Mais vous pouvez changer la famille de police, la taille, la couleur ou le format. –

0

1 et 2 - Change position of labels to be inside data set circles vous pouvez faire des changements de base sur la solution pour votre projet.

3- Je suis désolé mais c'est générique pour toutes les valeurs sur le graphique linéaire. Mais vous pouvez utiliser le graphique combiné pour ce problème. Pour la première et la dernière valeur, utilisez la bulle - pour les valeurs entre les valeurs, utilisez le graphique linéaire, c'est tout.

Goodluck :)

+0

Ils semblent bons, j'essaie merci :) – David