简体   繁体   中英

line and bar chart in one graph core plot

Hi i am looking for a chart where i can draw scatter plot over bar plot(line over bar chart), is it possible to draw line and bar chart in the same graph using core plot?

I tried following in order to get the same but i was not successfull.

CPTGraphHostingView *hostingView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(0, 0, width, height)];

CPTXYGraph *graph = [[CPTXYGraph alloc] initWithFrame: hostingView.bounds];
hostingView.hostedGraph = graph;


CPTBarPlot *cptBarPlot = [[CPTBarPlot alloc] init];
            cptBarPlot.fill = [CPTFill fillWithColor:color];
            cptBarPlot.lineStyle = nil;
            cptBarPlot.identifier = [columnSeries objectForKey:@"id"];
            cptBarPlot.name = [columnSeries objectForKey:@"displayName"];
            cptBarPlot.plotRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(BarInitialX) length:CPTDecimalFromDouble(xAxisLength)];

            cptBarPlot.barWidth = CPTDecimalFromDouble(BarWidth);
            cptBarPlot.dataSource = self;
            //cptBarPlot.opacity = 0.0f;
            cptBarPlot.delegate = self;

[graph addPlot:cptBarPlot];


CPTXYPlotSpace * secondPlotSpace = [[CPTXYPlotSpace alloc]init];
        secondPlotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(BarInitialX) length:CPTDecimalFromDouble(xAxisLength+1)];
        secondPlotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromFloat(yAxisLength)];

        //[graph addPlotSpace:secondPlotSpace];

        CPTScatterPlot * linePlot = [[CPTScatterPlot alloc] init];

        CPTMutableLineStyle * lineStyle = [CPTMutableLineStyle lineStyle];
        lineStyle.lineWidth = 1.f;
        lineStyle.lineColor = color;
        lineStyle.dashPattern = [NSArray arrayWithObjects:[NSNumber numberWithFloat:3.0f],nil];

        linePlot.dataLineStyle = lineStyle;
        linePlot.identifier = [lineSeries objectForKey:@"id"];
        linePlot.dataSource = self;
        linePlot.name = [lineSeries objectForKey:@"displayName"];

        //linePlot.plotRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(BarInitialX) length:CPTDecimalFromDouble(xAxisLength)];

        [graph addPlot: linePlot];

i tried above and also tried to add the plots in differect plot space ie [graph addPlot:linePlot toPlotSpace:secondPlotSpace] still i was not successfull.

i think i am missing something but couldnt find it.

Thanks for help in advance.

Did you implement the following method to return the chart values?

   -(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
    if ( [plot isKindOfClass:[CPTBarPlot class]] ) {
        switch (fieldEnum) {
            case CPTBarPlotFieldBarLocation:
                return ...;
                break;
            case CPTBarPlotFieldBarTip:
                return ...;
                break;
            case CPTBarPlotFieldBarBase:
                return ...;
            default:
                return 0;
                break;
        }
    } else {
        switch (fieldEnum) {
            case CPTScatterPlotFieldX:
                return ...;
                break;
            case CPTScatterPlotFieldY:
                return ...;
                break;
            default:
                return 0;
                break;
        }

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM