3

2つの異なるCorePlotグラフが同じビューに表示されるという問題があります。ビューに2つのホスティングビューを設定しましたが、すべての参照アウトレットが正しく接続されています。グラフの1つだけが正しく表示されます。メソッドにクイックNSLogを追加するとnumberForPlot、最初のグラフのみが入力され(graphおよびgraphView)、2番目のグラフ(trendおよび)は入力されていないことが示され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

これが私があなたのコードであまり正しくないと思ったものです、そしてこれがエリックが両方のホスティングビューが見えるかどうかあなたに尋ねた理由だと思います。

CPTXYGraphと呼ばれるgraph別のと呼ばれる2つのを作成していますtrend。Interface Builderでビューを設定する方法はわかりませんが、2つは作成しませんCPTXYGraph。またはのいずれかに&を追加trendSourceLinePlotします。trendSourceLinePlot1trendgraph

私はあなたがする必要があるのは同じでそれらを提示することだと思います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 に答える