3

我在同一视图中显示两个不同的 CorePlot 图表时遇到问题。我在我的视图中设置了两个托管视图,并且所有引用插座都正确连接。只有一张图正确显示。向该方法添加一个快速的 NSLognumberForPlot表明只有第一个图被填充 ( graphand graphView) 而不是第二个 ( trendand trendView)。这是代码:

- (void) graphSetup {
    CPTTheme *theme = [CPTTheme themeNamed:kCPTPlainWhiteTheme];

    graph = (CPTXYGraph *)[theme newGraph]; 

    graphView.hostedGraph = graph;
    graphView.allowPinchScaling = YES;

    graph.paddingLeft = -5;
    graph.paddingTop = 0;
    graph.paddingRight = -5;
    graph.paddingBottom = -5;
    graph.fill = nil;
    graph.plotAreaFrame.fill = nil;
    int a = 0;
    for (int i = 0; i < [romAveragesArray count]; i++) {
        if ([romAveragesArray objectAtIndex:i] != NULL)
            a++;
    }

    int localMax = 0;
    int localMin = 0;

    for (int a = 0; a < [romAveragesArray count]; a++) {
        if ([[romAveragesArray objectAtIndex:a] getValue] > localMax)
            localMax = [[romAveragesArray objectAtIndex:a] getValue];
        else if ([[romAveragesArray objectAtIndex:a] getValue] < localMin)
            localMin = [[romAveragesArray objectAtIndex:a] getValue];
    }

    for (int a = 0; a < [obaAveragesArray count]; a++) {
        if ([[obaAveragesArray objectAtIndex:a] getValue] > localMax)
            localMax = [[obaAveragesArray objectAtIndex:a] getValue];
        else if ([[obaAveragesArray objectAtIndex:a] getValue] < localMin)
            localMin = [[obaAveragesArray objectAtIndex:a] getValue];

    }


    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0)
                                                    length:CPTDecimalFromInt(145)];
    NSLog(@"%d",a);
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0)
                                                    length:CPTDecimalFromInt(localMax+15)];




    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;

    CPTXYAxis *x = axisSet.xAxis;
    x.majorIntervalLength = CPTDecimalFromFloat(10);
    x.minorTicksPerInterval = 2;
    x.borderWidth = 0;
    x.labelExclusionRanges = [NSArray arrayWithObjects:
                              [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-100) 
                                                           length:CPTDecimalFromFloat(300)], 
                              nil];;

    CPTXYAxis *y = axisSet.yAxis;
    y.majorIntervalLength = CPTDecimalFromFloat(10);
    y.minorTicksPerInterval = 1;
    y.labelExclusionRanges = [NSArray arrayWithObjects:
                              [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-100) 
                                                           length:CPTDecimalFromFloat(300)], 
                              nil];





    CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init];
    dataSourceLinePlot.identifier = @"Obama";
    dataSourceLinePlot.dataSource = self;
    CPTMutableLineStyle *style = [CPTMutableLineStyle lineStyle];
    style.lineColor = [CPTColor colorWithComponentRed:0.3215686274509804 green:0.6078431372549019 blue:1.0 alpha:1.0];
    dataSourceLinePlot.dataLineStyle = style;
    [graph addPlot:dataSourceLinePlot];


    CPTScatterPlot *dataSourceLinePlot1 = [[CPTScatterPlot alloc] init];
    dataSourceLinePlot1.identifier = @"Rom";
    dataSourceLinePlot1.dataSource = self;
    CPTMutableLineStyle *style1 = [CPTMutableLineStyle lineStyle];
    style1.lineColor = [CPTColor colorWithComponentRed:0.9803921568627451 green:0.47058823529411764 blue:0.47058823529411764 alpha:1.0];
    dataSourceLinePlot1.dataLineStyle = style1;
    [graph addPlot:dataSourceLinePlot1];
     [self trendSetup];

    [self postStats];

}


- (void) trendSetup {
    CPTTheme *theme1 = [CPTTheme themeNamed:kCPTPlainWhiteTheme];

    trend = (CPTXYGraph *) [theme1 newGraph];
    trendView.allowPinchScaling = YES;
    trendView.hostedGraph = trend;

    trend.paddingLeft = -5;
    trend.paddingRight = -5;
    trend.paddingTop = 0;
    trend.paddingBottom = -5;
    trend.fill =  nil;
    trend.plotAreaFrame.fill = nil;
    int obaMax, localMax;
    for (int i = 0; i < [obaArray count]; i++)
        obaMax += [[obaArray objectAtIndex:i] getValue];

    int romMax;
    for (int i = 0; i < [romArray count]; i++)
        romMax += [[romArray objectAtIndex:i] getValue];

    if (romMax > obaMax)
        localMax = romMax;
    else
        localMax = obaMax;

    CPTXYPlotSpace *trendSpace = (CPTXYPlotSpace *)trend.defaultPlotSpace;
    trendSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(504)];
    trendSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(localMax)];

    CPTXYAxisSet *trendSet = (CPTXYAxisSet *)trend.axisSet;

    CPTXYAxis *trendX = trendSet.xAxis;
    trendX.majorIntervalLength = CPTDecimalFromInt(10);
    trendX.minorTicksPerInterval = 2;
    trendX.borderWidth  = 0;
    trendX.labelExclusionRanges = [NSArray arrayWithObjects:[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-100) length:CPTDecimalFromFloat(300)], nil];;

    CPTXYAxis *trendY = trendSet.xAxis;
    trendY.majorIntervalLength = CPTDecimalFromInt(10);
    trendY.minorTicksPerInterval = 2;
    trendY.borderWidth  = 0;
    trendY.labelExclusionRanges = [NSArray arrayWithObjects:[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-100) length:CPTDecimalFromFloat(300)], nil];;

    CPTScatterPlot *trendSourceLinePlot = [[CPTScatterPlot alloc] init];
    trendSourceLinePlot.identifier = @"Obama Trend";
    trendSourceLinePlot.dataSource = self;
    CPTMutableLineStyle *style3 = [CPTMutableLineStyle lineStyle];
    style3.lineColor = [CPTColor colorWithComponentRed:0.3215686274509804 green:0.6078431372549019 blue:1.0 alpha:1.0];
    trendSourceLinePlot.dataLineStyle = style3;
    [trend addPlot:trendSourceLinePlot];


    CPTScatterPlot *trendSourceLinePlot1 = [[CPTScatterPlot alloc] init];
    trendSourceLinePlot1.identifier = @"Rom Trend";
    trendSourceLinePlot1.dataSource = self;
    CPTMutableLineStyle *style4 = [CPTMutableLineStyle lineStyle];
    style4.lineColor = [CPTColor colorWithComponentRed:0.9803921568627451 green:0.47058823529411764 blue:0.47058823529411764 alpha:1.0];
    trendSourceLinePlot1.dataLineStyle = style4;
    [trend addPlot:trendSourceLinePlot1];

}
4

2 回答 2

0

这是我发现您的代码不太正确的地方,我认为这就是 Eric 询问您两个托管视图是否可见的原因。

您正在创建两个CPTXYGraphs 一个称为graph另一个称为trend. 我不知道您如何在 Interface Builder 中设置 Views,但我不会创建两个CPTXYGraphs。我会将trendSourceLinePlot&添加trendSourceLinePlot1trendor 或graph.

我认为,您需要做的是将它们呈现在相同的CPTXYGraph. 所以,这是我的建议...

  1. 删除以下行trentSetup

    CPTTheme *theme1 = [CPTTheme themeNamed:kCPTPlainWhiteTheme];
    trend = (CPTXYGraph *) [theme1 newGraph];
    trendView.allowPinchScaling = YES;
    trendView.hostedGraph = trend;
    trend.paddingLeft = -5;
    trend.paddingRight = -5;
    trend.paddingTop = 0;
    trend.paddingBottom = -5;
    trend.fill =  nil;
    trend.plotAreaFrame.fill = nil;
    
  2. 替换以下行

    [trend addPlot:trendSourceLinePlot];
    [trend addPlot:trendSourceLinePlot1];
    

    分别与

    [graph addPlot:trendSourceLinePlot];
    [graph addPlot:trendSourceLinePlot1];
    

它还应该加快加载过程。

于 2012-05-20T14:51:55.987 回答
0

图表的 Y 范围太长。我从刻度线部分中删除了部分,现在它会及时更新。

于 2012-05-18T19:59:40.967 回答