2014-02-14 183 views
1

我的圖表中有多個y軸,我想爲每個y軸顯示不同的圖表比例。我的圖表顯示了2 y軸,但第二個y軸沒有顯示比例。圖表沒有在第二個y軸上顯示標籤(coreplot)

我已經添加了每個軸的兩個不同的繪圖空間。它繪製數據,但不顯示第二個y軸的刻度。

//plot configuration 
-(void)configurePlots { 
CPTColor *your_color = [CPTColor colorWithComponentRed:126 green:230 blue:255 alpha:0]; 


    // 1 - Get graph and plot space 
    CPTGraph *graph = self.hostView.hostedGraph; 
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace; 
    CPTXYPlotSpace *plotSpace2 =[[CPTXYPlotSpace alloc] init]; 
    graph.plotAreaFrame.fill = [CPTFill fillWithColor:your_color]; 
    // 2 - Create the three plots 
    CPTScatterPlot *aaplPlot = [[CPTScatterPlot alloc] init]; 
    aaplPlot.dataSource = self; 
    aaplPlot.identifier = CPDTickerSymbolAAPL; 
    CPTColor *aaplColor = [CPTColor redColor]; 
    [graph addPlot:aaplPlot toPlotSpace:plotSpace]; 

    [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:aaplPlot, nil]]; 
    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 *aaplLineStyle = [aaplPlot.dataLineStyle mutableCopy]; 
    aaplLineStyle.lineWidth = 0; 
    aaplLineStyle.lineColor = aaplColor; 
    aaplPlot.dataLineStyle = aaplLineStyle; 
    CPTMutableLineStyle *aaplSymbolLineStyle = [CPTMutableLineStyle lineStyle]; 
    aaplSymbolLineStyle.lineColor = aaplColor; 
    CPTPlotSymbol *aaplSymbol = [CPTPlotSymbol ellipsePlotSymbol]; 
    aaplSymbol.fill = [CPTFill fillWithColor:aaplColor]; 
    aaplSymbol.lineStyle = aaplSymbolLineStyle; 
    aaplSymbol.size = CGSizeMake(3.0f, 3.0f); 
    aaplPlot.plotSymbol = aaplSymbol; 

    CPTScatterPlot *googPlot = [[CPTScatterPlot alloc] init]; 
    googPlot.dataSource = self; 
    googPlot.identifier = CPDTickerSymbolGOOG; 
    CPTColor *googColor = [CPTColor greenColor]; 
    [graph addPlotSpace:plotSpace2]; 
    [graph addPlot:googPlot toPlotSpace:plotSpace2]; 


    [plotSpace2 scaleToFitPlots:[NSArray arrayWithObjects:googPlot, nil]]; 

    [xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.1f)]; 
    plotSpace2.xRange = plotSpace.xRange; 
    CPTMutablePlotRange *y2Range = [plotSpace2.yRange mutableCopy]; 
    [yRange expandRangeByFactor:CPTDecimalFromCGFloat(1.2f)]; 
    plotSpace2.yRange = y2Range; 

    CPTMutableLineStyle *googLineStyle = [googPlot.dataLineStyle mutableCopy]; 
    googLineStyle.lineWidth = 0; 
    googLineStyle.lineColor = googColor; 
    googPlot.dataLineStyle = googLineStyle; 
    googPlot.plotSpace = plotSpace2; 
    CPTMutableLineStyle *googSymbolLineStyle = [CPTMutableLineStyle lineStyle]; 
    googSymbolLineStyle.lineColor = googColor; 
    CPTPlotSymbol *googSymbol = [CPTPlotSymbol diamondPlotSymbol]; 
    googSymbol.fill = [CPTFill fillWithColor:googColor]; 
    googSymbol.lineStyle = googSymbolLineStyle; 
    googSymbol.size = CGSizeMake(2.0f, 2.0f); 
    googPlot.plotSymbol = googSymbol; 



    CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle]; 
    axisTitleStyle.color = [CPTColor blackColor]; 
    axisTitleStyle.fontName = @"Helvetica"; 
    axisTitleStyle.fontSize = 10.0f; 
    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle ]; 
    axisLineStyle.lineWidth = 1.0f; 
    axisLineStyle.lineColor = [CPTColor blackColor]; 
    CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init]; 
    axisTextStyle.color = [CPTColor blackColor]; 
    axisTextStyle.fontName = @"Helvetica"; 
    axisTextStyle.fontSize = 8.0f; 
    CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle]; 
    tickLineStyle.lineColor = [CPTColor blackColor]; 
    tickLineStyle.lineWidth = 1.0f; 
    CPTMutableLineStyle *gridLineStyle = [CPTMutableLineStyle lineStyle]; 
    gridLineStyle.lineColor = [CPTColor grayColor]; 
    gridLineStyle.lineWidth = 1.0f; 


    tickLineStyle.lineColor = [CPTColor blackColor]; 
    tickLineStyle.lineWidth = 1.0f; 

    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) (id)self.hostView.hostedGraph.axisSet; 
    axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromDouble(FinalMinValueY); 




    CPTXYAxis *x = axisSet.xAxis; 
    CPTXYAxis *y = axisSet.yAxis; 
    CPTXYAxis *y2 = [(CPTXYAxis *)[CPTXYAxis alloc] init] ; 



    //x.title = @"Day of Month"; 
    x.titleTextStyle = axisTitleStyle; 

    x.titleOffset = 4.0f; 
    x.axisLineStyle = axisLineStyle; 
    //x.labelingPolicy = CPTAxisLabelingPolicyNone; 
    x.labelTextStyle = axisTextStyle; 
    x.majorTickLineStyle = axisLineStyle; 
    x.majorTickLength = 2.0f; 
    x.tickDirection = CPTSignNegative; 
    x.minorTickLineStyle = nil; 

    CGFloat dateCount = [Reportdates count]; 
    NSMutableSet *xLabels = [NSMutableSet setWithCapacity:dateCount]; 
    NSMutableSet *xLocations = [NSMutableSet setWithCapacity:dateCount]; 
    NSMutableSet *xMinorLocations = [NSMutableSet setWithCapacity:dateCount]; 
    NSInteger i = 0; 
    NSInteger intervalValue = 0; 
    NSArray *ArrDatesForMajorTicks =[self CalculateXasisInterval]; 
    for (NSString *date in Reportdates) { 

     NSDateFormatter *DateFormatter=[[NSDateFormatter alloc] init]; 
     [DateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"]; 
     NSDate *d = [DateFormatter dateFromString:date]; 
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"MM/dd/yy"]; 
     NSString *st = [dateFormat stringFromDate:d]; 
     // NSLog(@"%@",st); 

     CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:st textStyle:x.labelTextStyle]; 
     //label.rotation = M_PI/4; 
     CGFloat location = i; 

     label.tickLocation = CPTDecimalFromCGFloat(location); 
     label.offset = x.majorTickLength; 
     if(i==0 || i==intervalValue) 
     { 
      if (label) { 
       [xLabels addObject:label]; 
       [xLocations addObject:[NSNumber numberWithFloat:location]]; 
      } 
      intervalValue = intervalValue + FinalIntervalValueX; 
     } 
     else 
     { 

      [xMinorLocations addObject:[NSNumber numberWithFloat:location]]; 

     } 
     i++; 
    } 

    x.axisLabels = xLabels; 
    x.majorTickLocations = xLocations; 
    x.labelingPolicy = CPTAxisLabelingPolicyNone; 
    // x.minorTickLocations =xMinorLocations; 
    // 4 - Configure y-axis 

    //y.title = @"Price"; 
    y.titleTextStyle = axisTitleStyle; 
    y.titleOffset = -40.0f; 
    y.axisLineStyle = axisLineStyle; 
    y.majorGridLineStyle = gridLineStyle; 
    //y.alternatingBandFills = [NSArray arrayWithObjects:[CPTColor redColor], [CPTColor greenColor], nil]; 
    y.labelingPolicy = CPTAxisLabelingPolicyNone; 
    y.labelTextStyle = axisTextStyle; 
    y.labelOffset = 12.0f; 
    y.majorTickLineStyle = axisLineStyle; 
    y.majorTickLength = 1.0f; 
    y.minorTickLength = 1.0f; 
    y.tickDirection = CPTSignPositive; 
    //x.preferredNumberOfMajorTicks = 6; 

    NSInteger majorIncrement = FinalIntervalValueY; 
    NSInteger minorIncrement = FinalIntervalValueY; 
    CGFloat yMax = FinalMaxValueY; // should determine dynamically based on max price 
    NSMutableSet *yLabels = [NSMutableSet set]; 
    NSMutableSet *yMajorLocations = [NSMutableSet set]; 
    NSMutableSet *yMinorLocations = [NSMutableSet set]; 
    for (NSInteger j = FinalMinValueY; j <= yMax; j += minorIncrement) { 
     NSUInteger mod = j % majorIncrement; 
     if (mod == 0) { 
      CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:[NSString stringWithFormat:@"%i", j] textStyle:y.labelTextStyle]; 
      NSDecimal location = CPTDecimalFromInteger(j); 
      label.tickLocation = location; 
      //label.offset = -y.majorTickLength - y.labelOffset; 
      label.offset = -20; 
      if (label) { 
       [yLabels addObject:label]; 
      } 
      [yMajorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:location]]; 
     } else { 
      [yMinorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:CPTDecimalFromInteger(j)]]; 
     } 
    } 



    y.axisLabels = yLabels; 
    y.majorTickLocations = yMajorLocations; 
    y.minorTickLocations = yMinorLocations; 




    //y2 axis implementation. 



    //y2.title = @"Price"; 
    y2.titleTextStyle = axisTitleStyle; 
// y2.titleOffset = -40.0f; 
    CPTMutableTextStyle *axisTextStyleY2 = [[CPTMutableTextStyle alloc] init]; 
    axisTextStyleY2.color = [CPTColor redColor]; 
    axisTextStyleY2.fontName = @"Helvetica"; 
    axisTextStyleY2.fontSize = 18.0f; 

    y2.axisLineStyle = axisLineStyle; 
    y2.majorGridLineStyle = Nil; 
    //y.alternatingBandFills = [NSArray arrayWithObjects:[CPTColor redColor], [CPTColor greenColor], nil]; 
    y2.labelingPolicy = CPTAxisLabelingPolicyNone; 
    y2.labelTextStyle = axisTextStyleY2; 
    y2.labelOffset = 12.0f; 
    y2.majorTickLineStyle = axisLineStyle; 
    y2.majorTickLength = 1.0f; 
    y2.minorTickLength = 1.0f; 
    y2.tickDirection = CPTSignPositive; 
    y2.axisConstraints = [CPTConstraints constraintWithUpperOffset:0]; 
    y2.labelingPolicy = CPTAxisLabelingPolicyNone; 
    y2.minorTicksPerInterval = 0; 

    y2.coordinate = CPTCoordinateY; 
    y2.plotSpace = plotSpace2; 

    majorIncrement = FinalIntervalValueY; 
    minorIncrement = FinalIntervalValueY; 
    yMax = FinalMaxValueY; // should determine dynamically based on max price 
    NSMutableSet *yLabels1 = [NSMutableSet set]; 
    NSMutableSet *yMajorLocations1 = [NSMutableSet set]; 
    NSMutableSet *yMinorLocations1 = [NSMutableSet set]; 
    for (NSInteger j = FinalMinValueY; j <= yMax; j += minorIncrement) { 
     NSUInteger mod = j % majorIncrement; 
     if (mod == 0) { 
      CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:[NSString stringWithFormat:@"%i", j] textStyle:y2.labelTextStyle]; 
      NSDecimal location = CPTDecimalFromInteger(j); 
      label.tickLocation = location; 
      //label.offset = -y.majorTickLength - y.labelOffset; 
      label.offset = -20; 
      if (label) { 
       [yLabels1 addObject:label]; 
      } 
      [yMajorLocations1 addObject:[NSDecimalNumber decimalNumberWithDecimal:location]]; 
     } else { 
      [yMinorLocations1 addObject:[NSDecimalNumber decimalNumberWithDecimal:CPTDecimalFromInteger(j)]]; 
     } 
    } 

    y2.axisLabels = yLabels; 
    y2.majorTickLocations = yMajorLocations1; 
    y2.minorTickLocations = yMinorLocations1; 



    x.coordinate = CPTCoordinateX; 
    y.coordinate = CPTCoordinateY; 
    y2.coordinate = CPTCoordinateY; 

    axisSet.axes = [NSArray arrayWithObjects:x, y,y2, nil]; 

} 

-(void)configureAxes { 
    // 1 - Create styles 

} 


//data binding. 
#pragma mark - Rotation 
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

#pragma mark - CPTPlotDataSource methods 
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot { 
    // return [[[CPDStockPriceStore sharedInstance] datesInMonth] count]; 
    return [Reportdates count]; 
} 

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index { 
    NSInteger valueCount = [Reportdates count]; 
    switch (fieldEnum) { 
     case CPTScatterPlotFieldX: 
      if (index < valueCount) { 
       return [NSNumber numberWithUnsignedInteger:index]; 
      } 
      break; 

     case CPTScatterPlotFieldY: 
      if ([plot.identifier isEqual:CPDTickerSymbolAAPL] == YES) { 
       //    return [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolAAPL] objectAtIndex:index]; 
       return [ChartValues objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:CPDTickerSymbolGOOG] == YES) { 
       //    return [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolGOOG] objectAtIndex:index]; 
       return [ChartValues objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:CPDTickerSymbolMSFT] == YES) { 
       return [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolMSFT] objectAtIndex:index]; 
      } 
      break; 
    } 
    return [NSDecimalNumber zero]; 
} 

回答

1

的刻度線僅是1個像素長(y2.majorTickLength = 1.0f;),這是一樣的軸線的寬度。由於它們使用相同的樣式,因此它們在軸線上繪製時不可見。使蜱更長或不同的顏色,以便你可以看到它們。

+0

thnx eric它的工作原理。 –