2

scaleToFitPlots を呼び出した後、X 軸は正しくスケーリングされますが、Y 軸が高すぎます。2 つのスクリーンショットが添付されています。1 番目の写真: 元の写真、2 番目の写真: 下にスクロールした後。

ここに画像の説明を入力 ここに画像の説明を入力

緑のボックス内でグラフを完全に (Y=0 から Y=MAX まで) 表示できるようにします。iPhone、iPad では、この誤った Y 軸スケーリングが発生します。

何らかの理由で、plotArea が実際よりも背が高いと思いますか?

私のグラフ構成コードのスニペット:

-(void)configureGraph {
    CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:self.hostView.bounds];
    graph.plotAreaFrame.borderLineStyle = nil;
    self.hostView.hostedGraph = graph;

    //Controls padding between frame & draw
    [graph.plotAreaFrame setPaddingTop:20.0f];
    [graph.plotAreaFrame setPaddingRight:20.0f];
    [graph.plotAreaFrame setPaddingBottom:20.0f];
    [graph.plotAreaFrame setPaddingLeft:30.0f];
    //Controls padding between frame and graph (graph is wrapper)
    graph.paddingLeft = 0.0;
    graph.paddingTop = 0.0;
    graph.paddingRight = 0.0;
    graph.paddingBottom = 0.0;

    // 5 - Enable user interactions for plot space
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
    plotSpace.allowsUserInteraction = YES;

}

-(void)scaleToFitPlot
{
    CPTGraph *graph = [self getGraph];
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
    [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:self.meterPlot, nil]];
}

-(void)configurePlots {
    // 1 - Get graph and plot space
    CPTGraph *graph = self.hostView.hostedGraph;
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;

    // 2 - Create the three plots
    meterPlot = [[CPTScatterPlot alloc] init];

    meterPlot.dataSource = self;
    meterPlot.identifier = MYMSymbolHourly;
    // Set plot delegate, to know when symbols have been touched
    // We will display an annotation when a symbol is touched, but this can be another graph!
    meterPlot.delegate                         = self;
    meterPlot.plotSymbolMarginForHitDetection  = 5.0f;

    //CPTColor *meterColor = [CPTColor greenColor];
    CPTColor *meterColor = [self orangeClr];

    [graph addPlot:meterPlot toPlotSpace:plotSpace];
    // 3 - Set up plot space
    printf("\nset initialscale");
    //[plotSpace scaleToFitPlots:[NSArray arrayWithObjects:meterPlot, nil]];
    [self scaleToFitPlot];
    CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
    //[xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.1f)];
    plotSpace.xRange = xRange;
    CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy];
    //[yRange expandRangeByFactor:CPTDecimalFromCGFloat(1.2f)];
    plotSpace.yRange = yRange;
    // 4 - Create styles and symbols
    CPTMutableLineStyle *meterLineStyle = [meterPlot.dataLineStyle mutableCopy];
    meterLineStyle.lineWidth = 2.5;
    meterLineStyle.lineColor = meterColor;
    meterPlot.dataLineStyle = meterLineStyle;
    CPTMutableLineStyle *meterSymbolLineStyle = [CPTMutableLineStyle lineStyle];
    meterSymbolLineStyle.lineColor = meterColor;
    CPTPlotSymbol *meterSymbol = [CPTPlotSymbol ellipsePlotSymbol];
    meterSymbol.fill = [CPTFill fillWithColor:meterColor];
    meterSymbol.lineStyle = meterSymbolLineStyle;
    meterSymbol.size = CGSizeMake(6.0f, 6.0f);
    meterPlot.plotSymbol = meterSymbol;
}

-(void)configureAxes {
    // 1 - Create styles
    CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle];
    axisTitleStyle.color = [self grey222Clr];
    axisTitleStyle.fontName = @"Helvetica-Bold";
    axisTitleStyle.fontSize = 12.0f;
    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle];
    axisLineStyle.lineWidth = 2.0f;
    axisLineStyle.lineColor = [self axisGreyClr];
    CPTMutableTextStyle *xAxisTextStyle = [[CPTMutableTextStyle alloc] init];
    xAxisTextStyle.color = [self grey222Clr]; // This is causing that line bug on y axis
    xAxisTextStyle.fontName = @"Helvetica-Bold";
    xAxisTextStyle.fontSize = 10.0f;


    CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle];
    tickLineStyle.lineColor = [self axisGreyClr];
    tickLineStyle.lineWidth = 2.0f;
    CPTMutableLineStyle *gridLineStyle = [CPTMutableLineStyle lineStyle];

    gridLineStyle.lineColor = [self axisGreyClr];
    gridLineStyle.lineWidth = 2.0f;

    gridLineStyle.dashPattern = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.8f], nil];
    gridLineStyle.patternPhase=0.0f;

    // 2 - Get axis set
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.hostView.hostedGraph.axisSet;
    // 3 - Configure x-axis
    CPTAxis *x = axisSet.xAxis;
    x.title = [self getXAxisTitleForChart];
    x.titleTextStyle = axisTitleStyle;
    x.titleOffset = 15.0f;
    x.axisLineStyle = axisLineStyle;
    x.labelingPolicy = CPTAxisLabelingPolicyNone;
    x.labelTextStyle = xAxisTextStyle;
    x.majorTickLineStyle = axisLineStyle;
    x.majorTickLength = 4.0f;
    x.tickDirection = CPTSignNegative;
    x.majorGridLineStyle = gridLineStyle;

    [self setXAxisLabels];

    CPTMutableTextStyle *yAxisTextStyle = [[CPTMutableTextStyle alloc] init];
    yAxisTextStyle.color = [self orangeClr]; 
    yAxisTextStyle.fontName = @"Helvetica-Bold";
    yAxisTextStyle.fontSize = 11.0f;

    // 4 - Configure y-axis
    CPTAxis *y = axisSet.yAxis;
    y.title = @"Usage kWh";
    y.titleTextStyle = axisTitleStyle;
    y.titleOffset = -46.0f;
    y.axisLineStyle = axisLineStyle;
    y.majorGridLineStyle = gridLineStyle;
    y.labelingPolicy = CPTAxisLabelingPolicyNone;
    y.labelTextStyle = yAxisTextStyle;

    y.labelOffset = 30.0f;
    y.majorTickLineStyle = axisLineStyle;
    y.majorTickLength = 4.0f;
    y.minorTickLength = 2.0f;
    y.tickDirection = CPTSignPositive;

    [self setYAxisLabels];
}
4

1 に答える 1

3

最初の画像は、 の正しい結果を示しています-scaleToFitPlots:。x と y のプロット データを正確に囲むプロット範囲を計算します。必要な y 範囲 (たとえば、Y=0 から Y=MAX) が既にわかっている場合は、それを直接設定します。x 軸のみをスケーリングする場合は、 を呼び出し-scaleToFitPlots:てから設定しyRangeます。

于 2012-12-15T00:20:27.377 に答える