2012-12-14 3 views
2

scaleToFitPlots를 호출 한 후 내 X 축의 크기가 올바르게 조정되었지만 Y 축이 너무 높습니다. 첨부 된 두 개의 스크린 샷, 첫 번째 그림 : 원본, 두 번째 그림 : 아래로 스크롤 한 후. enter image description hereCoreplot scaletofitplotissue

enter image description here

는 I 그래프 녹색 박스 내 (Y = MAX 행에서 Y = 0) 전적으로 볼 원한다. 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]; 
} 
+0

뷰의 현재 모든 플롯에 맞게 스케일링되지 않습니까? 어떤 행동을 성취하고 싶습니까? –

+0

플롯이 하나뿐입니다. 네가 plotSpace 주위를 드래그하면 예가 나타납니다. 그러나 플롯이 녹색 상자의 크기 내에 완전히 포함되도록하고 싶습니다. – Baconbeastnz

+0

yRange로 인해 문제가됩니까? – iDev

답변

3

-scaleToFitPlots: 이미지의 정확한 결과를 나타낸다. x와 y에 대한 플롯 데이터를 정확하게 둘러싸는 플롯 범위를 계산합니다. 원하는 Y 범위 (예 : Y = 0에서 Y = MAX)를 이미 알고 있다면 직접 설정하십시오. x 축만 축척하려면 -scaleToFitPlots:으로 전화 한 후 yRange을 설정하십시오.

+0

scalToFitPlots을 실행 한 후 어떻게 plotSpace의 새로운 최대 최대/분받을 수 있습니까? – whyoz

+0

보세요 플롯 범위에는 범위의 위치, 길이, 최소, 최대 및 중간 점을 제공하는 속성이 있습니다. –