2
votes

So my problem is simple. I am trying to switch my chart from a bar graph to a line graph but my line chart does not show/plot. I use similar code for my CPTBarPlot 'Bar Chart' and this plots/shows correctly.

My Bar Plot Code which plots correctly is:

CPTBarPlot *barPlot             = nil;    
barPlot                         = [CPTBarPlot tubularBarPlotWithColor:[CPTColor colorWithComponentRed:0.9294f green:0.3960f blue:0.5921f alpha:1.0f] horizontalBars:NO];
barPlot.fill                    = [CPTFill fillWithColor:[CPTColor colorWithComponentRed:0.9294f green:0.3960f blue:0.5921f alpha:1.0f]];
barPlot.opacity                 = 0.8f;
barPlot.dataSource              = self;
barPlot.delegate                = self;
barPlot.baseValue               = CPTDecimalFromString(@"0");
barPlot.barOffset               = CPTDecimalFromFloat(0.50f);

switch (graphType) {
    case kWeightThreeMonth:
    {
        barPlot.identifier  = [GraphsViewController threeMonthBarPlotIdentifier];
    }
        break;

    case kWeightSixMonth:
    {
        barPlot.identifier  = [GraphsViewController sixMonthBarPlotIdentifier];
    }
        break;

    case kWeightNineMonth:
    {
        barPlot.identifier  = [GraphsViewController nineMonthBarPlotIdentifier];
    }
        break;  
    default:
        break;
} 
barPlot.barCornerRadius         = 2.0f;
barPlot.lineStyle               = nil;
[lineGraph addPlot:barPlot toPlotSpace:plotSpace];

My Line Plot Code which does not show is:

// Create a blue plot area
CPTScatterPlot *boundLinePlot   = [[[CPTScatterPlot alloc] init] autorelease];
CPTMutableLineStyle *lineStyle  = [CPTMutableLineStyle lineStyle];
lineStyle.miterLimit            = 1.0f;
lineStyle.lineWidth             = 3.0f;
lineStyle.lineColor             = [CPTColor redColor];
boundLinePlot.dataLineStyle     = lineStyle;
switch (graphType) {
    case kWeightThreeMonth:
    {
        boundLinePlot.identifier  = [GraphsViewController threeMonthBarPlotIdentifier];
    }
        break;

    case kWeightSixMonth:
    {
        boundLinePlot.identifier  = [GraphsViewController sixMonthBarPlotIdentifier];
    }
        break;

    case kWeightNineMonth:
    {
        boundLinePlot.identifier  = [GraphsViewController nineMonthBarPlotIdentifier];
    }
        break;  
    default:
        break;
} 

boundLinePlot.dataSource    = self;
boundLinePlot.delegate      = self;
[lineGraph addPlot:boundLinePlot toPlotSpace:plotSpace];

// Do a blue gradient
CPTColor *areaColor1        = [CPTColor colorWithComponentRed:0.3 green:0.3 blue:1.0 alpha:0.8];
CPTGradient *areaGradient1  = [CPTGradient gradientWithBeginningColor:areaColor1 endingColor:[CPTColor clearColor]];
areaGradient1.angle         = -90.0f;
CPTFill *areaGradientFill   = [CPTFill fillWithGradient:areaGradient1];
boundLinePlot.areaFill      = areaGradientFill;
boundLinePlot.areaBaseValue = [[NSDecimalNumber zero] decimalValue];

// Add plot symbols
CPTMutableLineStyle *symbolLineStyle = [CPTMutableLineStyle lineStyle];
symbolLineStyle.lineColor   = [CPTColor blackColor];
CPTPlotSymbol *plotSymbol   = [CPTPlotSymbol ellipsePlotSymbol];
plotSymbol.fill             = [CPTFill fillWithColor:[CPTColor blueColor]];
plotSymbol.lineStyle        = symbolLineStyle;
plotSymbol.size             = CGSizeMake(10.0, 10.0);
boundLinePlot.plotSymbol    = plotSymbol;

Am I missing something here? I would of thought that the datasource etc would all work the same way considering the Bar Plot works correctly. I am simply just trying to switch from a bar chart, to a line chart.

Any help would be much appreciated.

Kind regards, Dan

2

2 Answers

1
votes

You may need to reload your plot's data. Try doing this:

[lineGraph reloadData]
1
votes

This was actually my own fault.

In the dataSource methods;

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot
-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index

I was doing an If statement of;

if ( [plot isKindOfClass:[CPTBarPlot class]] ){

Ofcourse I was using a CPTScatterPlot so my code was not being called. Doh.