Диаграмма рассеяния с Xcode для данных iPhone не синхронизируется с осью, а основная толстая не показана

Я новичок в Stackru и Xcode для iPhone. Английский не мой родной язык, поэтому, пожалуйста, потерпите меня. Я пытался сделать график между датами (ось х) и значением экономии топлива (ось у).

Я использую основной сюжет 1.4. Моя проблема:

  1. Данные как-то не синхронизируются напрямую по оси х.
  2. Основной контрольный список как-то не отображается. (Решена)
  3. Есть ли способ сделать так, чтобы на графике была показана только ось позитива? (Решена)

Я делаю много NSLog для отладки данных. Я ищу в Google (включая этот сайт) учебник о том, как использовать пользовательский ярлык и как составить точечный график.

У меня есть следующие данные:

(
    {
    0 = "31-Jan-2014";
    1 = 10;
},
    {
    0 = "02-Feb-2014";
    1 = "10.07";
},
    {
    0 = "24-Feb-2014";
    1 = "8.75";
}
)

У меня странный результат с приведенными выше данными. Пожалуйста, смотрите включенный график, это изображение моего графика:

Скриншот

на графике данные y не отображаются на оси x.

вот соответствующий код

    - (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot
{
    NSLog(@"Number of Records for Plot = %lu",(unsigned long)[self.plotData count]);
    return [_plotData count];
}

- (NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx
{
    //NSDecimalNumber *result = [[_plotData objectAtIndex:idx]objectForKey:[NSNumber numberWithInt:fieldEnum]];
    NSNumber *result;
        switch (fieldEnum) {
        case CPTScatterPlotFieldX:
//                NSDate * observationDate = [[_plotData objectAtIndex:idx]objectForKey:[NSNumber numberWithInt:fieldEnum]];
//                NSTimeInterval secondsSince1970 = [_observationDate timeIntervalSince1970];
                result = [[_plotData objectAtIndex:idx]objectForKey:[NSNumber numberWithInt:fieldEnum]];

            break;
        case CPTScatterPlotFieldY:
            result = [[_plotData objectAtIndex:idx] objectForKey:[NSNumber numberWithInt:fieldEnum]];
}

//result = [[_plotData objectAtIndex:idx] objectForKey:[NSNumber numberWithInt:fieldEnum]];
     NSLog(@"Number tobe  Plot with index = %@ %lu, %lu",result,(unsigned long)idx,(unsigned long)fieldEnum);
    return result;

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initPlot];



    // Do any additional setup after loading the view.
}

- (void)initPlot
{
    //NSDate *refDate       = [NSDate dateWithNaturalLanguageString:@"12:00 Oct 29, 2009"];
    [self fetchResultOneWeek];
    [self configureHost];
    [self configureFEGraph];
    [self configurePlots];
    [self configureAxis];
}

- (void)configureHost
{
    CGRect frame1 = CGRectMake(0,80,320,200);
    FESubView = [[CPTGraphHostingView alloc]initWithFrame:frame1];
    FESubView.allowPinchScaling = YES;
    [self.view addSubview:FESubView];
    CGRect frame2 = CGRectMake(0,410,320,400);
    GasPriceSubView = [[CPTGraphHostingView alloc]initWithFrame:frame2];
    GasPriceSubView.allowPinchScaling = YES;
    [self.view addSubview:GasPriceSubView];
}

- (void)configureFEGraph
{
    CPTGraph *graph = [[CPTXYGraph alloc]initWithFrame:FESubView.bounds];
    [graph applyTheme:[CPTTheme themeNamed:kCPTStocksTheme]];
    FESubView.hostedGraph = graph;

    graph.title = @"Fuel Economy Graph";
    CPTMutableTextStyle *titleStyle = [CPTMutableTextStyle textStyle];
    titleStyle.color = [CPTColor whiteColor];
    titleStyle.fontName = @"Helvetica-Bold";
    titleStyle.fontSize = 14.0f;
    graph.titleTextStyle = titleStyle;
    graph.titlePlotAreaFrameAnchor = CPTRectAnchorTop;
    graph.titleDisplacement = CGPointMake(0.0f, 10.0f);

    // 4 - Set padding for plot area
    [graph.plotAreaFrame setPaddingLeft:10.0f];
    [graph.plotAreaFrame setPaddingBottom:10.0f];
    [graph.plotAreaFrame setPaddingTop:10.0f];
    [graph.plotAreaFrame setPaddingRight:10.0f];

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

}

- (void)configurePlots
{
    NSMutableArray *dataTobePlotted = [NSMutableArray array];

    NSUInteger i;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"dd-MMM-YYY"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+0:07"]];
    //NSTimeInterval oneDay = 24 * 60 * 60;

   for (i = 0;i < [[self.fullTransaction valueForKey:@"tDate"]count]; i++)
    {
        NSDate *observationDate = [[self.fullTransaction valueForKey:@"tDate"]objectAtIndex:i];
         NSLog(@"observationDate is : %@",observationDate);
        NSTimeInterval x = [observationDate timeIntervalSince1970];
        NSLog(@"x is : %f",x);
        id y = [[self.fullTransaction valueForKey:@"tFuelEconomy"]objectAtIndex:i];
         NSLog(@"y is : %@",y);
        [dataTobePlotted addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithDouble:x],[NSNumber numberWithInt:CPTScatterPlotFieldX],y,[NSNumber numberWithInt:CPTScatterPlotFieldY],nil]];
        //[dataTobePlotted addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSDecimalNumber numberWithFloat:x],[NSNumber numberWithInt:CPTScatterPlotFieldX],y,[NSNumber numberWithInt:CPTScatterPlotFieldY],nil]];
        NSLog(@" int X is %@",[NSNumber numberWithInt:CPTScatterPlotFieldX]);
        NSLog(@" int Y is %@",[NSNumber numberWithInt:CPTScatterPlotFieldY]);
        NSLog(@"ScatterPlotField X is %@",[NSNumber numberWithInt:CPTScatterPlotFieldX]);
        NSLog(@"ScatterPlotField Y is %@",[NSNumber numberWithInt:CPTScatterPlotFieldY]);
        NSLog(@"Data to be Plotted: %@",dataTobePlotted);
    }
    self.plotData = dataTobePlotted;

    CPTGraph *graph = FESubView.hostedGraph;
    [graph applyTheme:[CPTTheme themeNamed:kCPTStocksTheme]];

    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
        //create plot
    CPTScatterPlot *fePlot = [[CPTScatterPlot alloc]init];
    fePlot.dataSource = self;
    CPTColor *feColor = [CPTColor greenColor];
    [graph addPlot:fePlot];

    //setup plot space
    [plotSpace scaleToFitPlots:[NSArray arrayWithObjects: fePlot,Nil]];
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromString(@"3.0") length:CPTDecimalFromString(@"10.0")];
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromString(@"8.0") length:CPTDecimalFromString(@"2.0")];

    //set up plot space
    //[plotSpace scaleToFitPlots:[NSArray arrayWithObjects:fePlot,nil]];
    CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
    [xRange expandRangeByFactor:CPTDecimalFromCGFloat(2.0f)];
    plotSpace.xRange = xRange;
    CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy];
    [yRange expandRangeByFactor:CPTDecimalFromCGFloat(5.0f)];
    plotSpace.yRange = yRange;


//    //create styles and symbols
    CPTMutableLineStyle *feLineStyle = [fePlot.dataLineStyle mutableCopy];
    CPTColor *areaColor = [CPTColor colorWithComponentRed:0.3 green:1.0 blue:0.3 alpha:0.3];
    CPTGradient *areaGradient = [CPTGradient gradientWithBeginningColor:areaColor endingColor:[CPTColor clearColor]];
    areaGradient.angle = -90.0f;
    CPTFill *areaGradientFill = [CPTFill fillWithGradient:areaGradient];
    fePlot.areaFill = areaGradientFill;

    feLineStyle.lineWidth = 2.5;
    feLineStyle.lineColor = feColor;
    fePlot.dataLineStyle = feLineStyle;
    CPTMutableLineStyle *feSymbolLineStyle = [CPTMutableLineStyle lineStyle];
    feSymbolLineStyle.lineColor = feColor;
    CPTPlotSymbol *feSymbol = [CPTPlotSymbol ellipsePlotSymbol];
    feSymbol.fill = [CPTFill fillWithColor:feColor];
    feSymbol.lineStyle = feSymbolLineStyle;
    feSymbol.size = CGSizeMake(6.0f, 6.0f);
    fePlot.plotSymbol = feSymbol;
}


- (void)configureAxis
{
  // 1 - Create styles
        // 2 - Get axis set
    CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle];
    axisTitleStyle.color = [CPTColor whiteColor];
    axisTitleStyle.fontName = @"Helvetica-Bold";
    axisTitleStyle.fontSize = 12.0f;
    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle];
    axisLineStyle.lineWidth = 2.0f;
    axisLineStyle.lineColor = [CPTColor whiteColor];
    CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init];
    axisTextStyle.color = [CPTColor whiteColor];
    axisTextStyle.fontName = @"Helvetica-Bold";
    axisTextStyle.fontSize = 11.0f;
    CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle];
    tickLineStyle.lineColor = [CPTColor whiteColor];
    tickLineStyle.lineWidth = 2.0f;
    CPTMutableLineStyle *gridLineStyle = [CPTMutableLineStyle lineStyle];
    tickLineStyle.lineColor = [CPTColor blackColor];
    tickLineStyle.lineWidth = 1.0f;
    CPTMutableTextStyle *labelXTextStyle = [CPTMutableTextStyle textStyle];
    labelXTextStyle.fontName = @"Helvetica";
    labelXTextStyle.fontSize = 10;
    labelXTextStyle.color = [CPTColor whiteColor];

    // 2 - Get Axis Set
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) FESubView.hostedGraph.axisSet;

    // 3 Configure x-Axis
    CPTXYAxis *x          = axisSet.xAxis;
    x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"4");
    x.title = @"Date";
    x.titleTextStyle = axisTitleStyle;
    x.titleOffset = 47.0f;
    //x.title = @"Date";
    x.minorTicksPerInterval       = 0;
    x.majorTickLength = 10.0f;
    x.tickDirection = CPTSignPositive;

    //NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:5], [NSDecimalNumber numberWithInt:10], [NSDecimalNumber numberWithInt:10], [NSDecimalNumber numberWithInt:15],
    //                                [NSDecimalNumber numberWithInt:20], [NSDecimalNumber numberWithInt:25],[NSDecimalNumber numberWithInt:30],nil];

    NSInteger i;
    NSMutableArray *customTickLocations = [NSMutableArray array];
    for (i = 0; i < [[self.fullTransaction valueForKey:@"tDate"]count];i++)
    {
        [customTickLocations addObject:[NSDecimalNumber numberWithInt:((i+1)*5)]];
    }

    CPTPlotRange *xAxisRange=[CPTPlotRange plotRangeWithLocation:CPTDecimalFromString(@"0.0") length:CPTDecimalFromString(@"24.0")];
      x.visibleRange=xAxisRange;

    NSLog(@"dates are %@", [self.fullTransaction valueForKey:@"tDate"]);
    NSLog(@"Transaction FE %@", [self.fullTransaction valueForKey:@"tFuelEconomy"]);
    NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[self.plotData count]];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"dd-MMM-YYY"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+0:07"]];
    NSMutableSet *xLocations = [NSMutableSet setWithCapacity:[[self.fullTransaction valueForKey:@"tDate"]count]];
    x.labelingPolicy=CPTAxisLabelingPolicyNone;
    x.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"1"] decimalValue];
    NSInteger location;
    for (location = 0; location < [[self.fullTransaction valueForKey:@"tDate"]count];location++)
    {
        CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText: [dateFormatter stringFromDate:[[self.fullTransaction valueForKey:@"tDate"] objectAtIndex:location]] textStyle:labelXTextStyle];
        NSLog(@"Custom Labels = %@",newLabel);
        NSLog(@"Real Date = %@",[[self.fullTransaction valueForKey:@"tDate"] objectAtIndex:location]);
        NSLog(@"After assigned date = %@",[dateFormatter stringFromDate:[[self.fullTransaction valueForKey:@"tDate"] objectAtIndex:location]]);
        newLabel.tickLocation = CPTDecimalFromInt([[customTickLocations objectAtIndex:location] integerValue]);
        newLabel.offset =  2;
        newLabel.rotation = (1*M_PI)/4;
        [customLabels addObject:newLabel];
        [xLocations addObject:[NSNumber numberWithInteger:[[customTickLocations objectAtIndex:location] integerValue]]];

    }
    x.axisLabels = [NSSet setWithArray:customLabels];
    NSLog(@"Custom Labels = %@",customLabels);
    x.majorTickLocations = xLocations;
    //x.majorTickLocations = customTickLocations;
    x.majorTickLength = 5.0f;
    NSLog(@"Major TickLocations: %@",customTickLocations);

    CPTXYAxis *y = axisSet.yAxis;
    //y.orthogonalCoordinateDecimal = CPTDecimalFromCGFloat(0.0);
    y.majorIntervalLength         = CPTDecimalFromString(@"1.0");
    y.minorTicksPerInterval       = 5;
    y.majorTickLength = 5.0f;
    y.preferredNumberOfMajorTicks = 5;
    y.labelTextStyle = labelXTextStyle;
}

Ниже приведен результат nslog для данных id x и id y

2014-02-25 16:09:01.855 Fuel Eco[12079:70b] x is : 31-Jan-2014
2014-02-25 16:09:01.855 Fuel Eco[12079:70b] y is : 10
2014-02-25 16:09:01.855 Fuel Eco[12079:70b]  int X is 0
2014-02-25 16:09:01.856 Fuel Eco[12079:70b]  int Y is 1
2014-02-25 16:09:01.856 Fuel Eco[12079:70b] ScatterPlotField X is 0
2014-02-25 16:09:01.856 Fuel Eco[12079:70b] ScatterPlotField Y is 1
2014-02-25 16:09:01.857 Fuel Eco[12079:70b] Data to be Plotted: (
        {
        0 = "31-Jan-2014";
        1 = 10;
    }
)
2014-02-25 16:09:01.857 Fuel Eco[12079:70b] x is : 02-Feb-2014
2014-02-25 16:09:01.857 Fuel Eco[12079:70b] y is : 10.07
2014-02-25 16:09:01.858 Fuel Eco[12079:70b]  int X is 0
2014-02-25 16:09:01.858 Fuel Eco[12079:70b]  int Y is 1
2014-02-25 16:09:01.858 Fuel Eco[12079:70b] ScatterPlotField X is 0
2014-02-25 16:09:01.859 Fuel Eco[12079:70b] ScatterPlotField Y is 1
2014-02-25 16:09:01.859 Fuel Eco[12079:70b] Data to be Plotted: (
        {
        0 = "31-Jan-2014";
        1 = 10;
    },
        {
        0 = "02-Feb-2014";
        1 = "10.07";
    }
)
2014-02-25 16:09:01.859 Fuel Eco[12079:70b] x is : 24-Feb-2014
2014-02-25 16:09:01.860 Fuel Eco[12079:70b] y is : 8.75
2014-02-25 16:09:01.860 Fuel Eco[12079:70b]  int X is 0
2014-02-25 16:09:01.860 Fuel Eco[12079:70b]  int Y is 1
2014-02-25 16:09:01.861 Fuel Eco[12079:70b] ScatterPlotField X is 0
2014-02-25 16:09:01.861 Fuel Eco[12079:70b] ScatterPlotField Y is 1
2014-02-25 16:09:01.861 Fuel Eco[12079:70b] Data to be Plotted: (
        {
        0 = "31-Jan-2014";
        1 = 10;
    },
        {
        0 = "02-Feb-2014";
        1 = "10.07";
    },
        {
        0 = "24-Feb-2014";
        1 = "8.75";
    }
)

Ниже приведен результат nslog для отображения результата "- (NSNumber *)numberForPlot:(CPTPlot *) поле графика:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx" с данными,idx,fieldEnum.

2014-02-25 16:09:01.862 Fuel Eco[12079:70b] Number of Records for Plot = 3
2014-02-25 16:09:01.862 Fuel Eco[12079:70b] Number of Records for Plot = 3
2014-02-25 16:09:01.863 Fuel Eco[12079:70b] Number tobe  Plot with index = 31-Jan-2014 0, 0
2014-02-25 16:09:01.863 Fuel Eco[12079:70b] Number tobe  Plot with index = 02-Feb-2014 1, 0
2014-02-25 16:09:01.863 Fuel Eco[12079:70b] Number tobe  Plot with index = 24-Feb-2014 2, 0
2014-02-25 16:09:01.864 Fuel Eco[12079:70b] Number of Records for Plot = 3
2014-02-25 16:09:01.864 Fuel Eco[12079:70b] Number tobe  Plot with index = 10 0, 1
2014-02-25 16:09:01.864 Fuel Eco[12079:70b] Number tobe  Plot with index = 10.07 1, 1
2014-02-25 16:09:01.865 Fuel Eco[12079:70b] Number tobe  Plot with index = 8.75 2, 1
2014-02-25 16:09:01.865 Fuel Eco[12079:70b] Number of Records for Plot = 3

Спасибо всем

ОБНОВЛЕНИЕ *** Я переписал код, чтобы стать таким, и он работает:

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
    switch (fieldEnum)
    {
        case CPTScatterPlotFieldX:
        {
            NSDecimalNumber *num = [[plotData objectAtIndex:index] objectForKey:[NSNumber numberWithInt:fieldEnum]];
            return num;
        }
        case CPTScatterPlotFieldY:
        {
            if ([plot.identifier isEqual:@"Honda Plot"])
            {
                NSDecimalNumber *num = [[plotData1 objectAtIndex:index] objectForKey:[NSNumber numberWithInt:fieldEnum]];
                return num;
            }
            else
            {
                NSDecimalNumber *num = [[plotData objectAtIndex:index] objectForKey:[NSNumber numberWithInt:fieldEnum]];
                return num;
            }
        }
    }
    return nil;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self fetchResult];
    [self filterarray];
    [self filterArray1];

    //CGRect frame1 = CGRectMake(0,200,300,600);
    [self generateData];
    //FESubView = [[CPTGraphHostingView alloc]initWithFrame:frame1];
    [self renderInLayer:FESubView withTheme:Nil animated:NO];
    }

-(void)generateData
{

    if ( !plotData ) {
        //const NSTimeInterval oneDay = 24 * 60 * 60 ;
        gregorian = [self setCalendar];
       NSDateComponents *dateComponents = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit  | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit     ) fromDate:[[self.fullTransaction valueForKey:@"tDate" ] objectAtIndex:0]];
NSDate *refDate = [gregorian dateFromComponents:dateComponents];

        NSDate *dataDate = [[NSDate alloc]init];

        NSDateComponents *comps;

        int days;

        // Add some data
        NSMutableArray *newData = [NSMutableArray array];
        NSMutableArray *newData1 = [NSMutableArray array];
        NSUInteger i;



        for ( i = 0; i < [[self.fullTransaction valueForKey:@"tDate"]count]; i++ ) {

            dataDate = [[self.fullTransaction valueForKey:@"tDate"]objectAtIndex:i];
           NSLog(@"RefDate is: %@",refDate);
            NSLog(@"DateDate is: %@",dataDate);
            comps = [gregorian components:NSDayCalendarUnit fromDate:refDate toDate:dataDate  options:0];
            days = [comps day];
            NSTimeInterval x = oneDay *days;
            //id y             = [[self.fullTransaction valueForKey:@"tFuelEconomy"]objectAtIndex:i];
            int counts = [self.filteredTransaction count];
            id y;
            id z;
            int count1 = [self.filteredTransaction1 count];
            if (i < counts)
            {
            y             = [[self.filteredTransaction valueForKey:@"tFuelEconomy"]objectAtIndex:i];
            }else y = NULL;
            if (i < count1)
            {
                z            = [[self.filteredTransaction1 valueForKey:@"tFuelEconomy"]objectAtIndex:i];
            }else z = NULL;


           [newData addObject:
             [NSDictionary dictionaryWithObjectsAndKeys:
              [NSDecimalNumber numberWithFloat:x], [NSNumber numberWithInt:CPTScatterPlotFieldX],
              y, [NSNumber numberWithInt:CPTScatterPlotFieldY],
              nil]];
            [newData1 addObject:
             [NSDictionary dictionaryWithObjectsAndKeys:
              [NSDecimalNumber numberWithFloat:x], [NSNumber numberWithInt:CPTScatterPlotFieldX],
              z, [NSNumber numberWithInt:CPTScatterPlotFieldY],
              nil]];
        }
        plotData = newData;
        plotData1 = newData1;
        NSLog(@"Data are: %@",plotData);
        NSLog(@"Data are: %@",plotData1);
    }
}

-(void)renderInLayer:(CPTGraphHostingView *)layerHostingView withTheme:(CPTTheme *)theme animated:(BOOL)animated
{
    // If you make sure your dates are calculated at noon, you shouldn't have to
    // worry about daylight savings. If you use midnight, you will have to adjust
    // for daylight savings time.
    CGRect frame1 = CGRectMake(10,150,320,250);
    FESubView = [[CPTGraphHostingView alloc]initWithFrame:frame1];
    FESubView.allowPinchScaling = YES;
    [self.view addSubview:FESubView];

    //NSDateComponents *dateComponents = [[NSDateComponents alloc] init];

    gregorian = [self setCalendar];
    NSDateComponents *dateComponents = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit  | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit     ) fromDate:[[self.fullTransaction valueForKey:@"tDate" ] objectAtIndex:0]];

    NSDate *refDate = [gregorian dateFromComponents:dateComponents];

    NSLog(@"RefDate is :%@",refDate);

#if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
    CGRect bounds = layerHostingView.bounds;
#else
    CGRect bounds = NSRectToCGRect(layerHostingView.bounds);
#endif

    CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:bounds];
    [graph applyTheme:[CPTTheme themeNamed:kCPTDarkGradientTheme]];
    FESubView.hostedGraph = graph;
    graph.title = @"Fuel Economy Graph";
    CPTMutableTextStyle *titleStyle = [CPTMutableTextStyle textStyle];
    titleStyle.color = [CPTColor whiteColor];
    titleStyle.fontName = @"Helvetica-Bold";
    titleStyle.fontSize = 14.0f;
    graph.titleTextStyle = titleStyle;
    graph.titlePlotAreaFrameAnchor = CPTRectAnchorTop;
    graph.titleDisplacement = CGPointMake(0.0f, 10.0f);
    // 4 - Set padding for plot area
    [graph.plotAreaFrame setPaddingLeft:40.0f];
    [graph.plotAreaFrame setPaddingBottom:65.0f];
    [graph.plotAreaFrame setPaddingTop:3.0f];
    [graph.plotAreaFrame setPaddingRight:3.0f];

    graph.legend = [CPTLegend legendWithGraph:graph];
    graph.legend.fill = [CPTFill fillWithColor:[CPTColor darkGrayColor]];
    graph.legend.cornerRadius = 5.0;
    graph.legend.swatchSize = CGSizeMake(25.0, 25.0);
    graph.legendAnchor = CPTRectAnchorCenter;

    graph.legendDisplacement = CGPointMake(2.40, 12.0);

    // Setup scatter plot space
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
    NSTimeInterval xLow       = 0.0f;
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xLow) length:CPTDecimalFromFloat(oneDay * 10)];
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(5.0) length:CPTDecimalFromFloat(10.0f)];

    //symbol

    CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
    [xRange expandRangeByFactor:CPTDecimalFromCGFloat(1)];
//   
    plotSpace.allowsUserInteraction = YES;

    // Create a plot that uses the data source method
    CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init];
    dataSourceLinePlot.identifier = @"Nisan Plot";
    CPTColor *feColor = [CPTColor redColor];
    CPTMutableLineStyle *feLineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy];
    feLineStyle.lineWidth = 2.5;
    feLineStyle.lineColor = feColor;
    dataSourceLinePlot.dataLineStyle = feLineStyle;
    CPTMutableLineStyle *feSymbolLineStyle = [CPTMutableLineStyle lineStyle];
    feSymbolLineStyle.lineColor = feColor;
    CPTPlotSymbol *feSymbol = [CPTPlotSymbol ellipsePlotSymbol];
    feSymbol.fill = [CPTFill fillWithColor:feColor];
    feSymbol.lineStyle = feSymbolLineStyle;
    feSymbol.size = CGSizeMake(6.0f, 6.0f);
    dataSourceLinePlot.plotSymbol = feSymbol;
    CPTMutableTextStyle *feLabelStyle = [CPTMutableTextStyle textStyle];
    feLabelStyle.fontSize = 10;
    feLabelStyle.color = [CPTColor whiteColor];
    dataSourceLinePlot.labelTextStyle = feLabelStyle;
    dataSourceLinePlot.title = @"Nissan Terano";

    dataSourceLinePlot.dataSource = self;
    [graph addPlot:dataSourceLinePlot];

    CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init];
    axisTextStyle.color = [CPTColor whiteColor];
    axisTextStyle.fontName = @"Helvetica-Bold";
    axisTextStyle.fontSize = 8.0f;
    CPTScatterPlot *dataSourceLinePlot1 = [[CPTScatterPlot alloc] init];
    dataSourceLinePlot1.identifier = @"Honda Plot";
    CPTColor *feColor1 = [CPTColor blueColor];
    CPTMutableLineStyle *feLineStyle1 = [dataSourceLinePlot1.dataLineStyle mutableCopy];
    feLineStyle1.lineWidth = 2.5;
    feLineStyle1.lineColor = feColor1;
    dataSourceLinePlot1.dataLineStyle = feLineStyle1;
    CPTMutableLineStyle *feSymbolLineStyle1 = [CPTMutableLineStyle lineStyle];
    feSymbolLineStyle1.lineColor = feColor1;
    CPTPlotSymbol *feSymbol1 = [CPTPlotSymbol ellipsePlotSymbol];
    feSymbol1.fill = [CPTFill fillWithColor:feColor1];
    feSymbol1.lineStyle = feSymbolLineStyle1;
    feSymbol1.size = CGSizeMake(6.0f, 6.0f);
    dataSourceLinePlot1.plotSymbol = feSymbol1;
    //CPTTextStyle *test = [CPTTextStyle textStyle];
    //test.fontSize = 12;
    CPTMutableTextStyle *feLabelStyle1 = [CPTMutableTextStyle textStyle];
    feLabelStyle1.fontSize = 10;
    feLabelStyle1.color = [CPTColor whiteColor];
    dataSourceLinePlot1.labelTextStyle = feLabelStyle1;

    dataSourceLinePlot1.dataSource = self;
    [graph addPlot:dataSourceLinePlot1];
dataSourceLinePlot1.title = @"Honda Jazz";
//    
    // Axes
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
    CPTXYAxis *x          = axisSet.xAxis;
    x.majorIntervalLength         = CPTDecimalFromFloat(oneDay);
    x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"5");
    x.minorTicksPerInterval       = 0;
    x.labelTextStyle = axisTextStyle;
    //x.axisLineStyle = axisLineStyle;
    //x.axisLineStyle = feLabelStyle;
    dateFormatter = [self setDateFormatterLabel];
    //dateFormatter.dateStyle = kCFDateFormatterShortStyle;

    CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter];
    timeFormatter.referenceDate = refDate;
    x.labelFormatter            = timeFormatter;
    x.labelRotation            = M_PI / 4;
    x.tickLabelDirection = CPTSignPositive;
    x.tickDirection = CPTSignPositive;
    //x.labelTextStyle = feLabelStyle;
    //x.visibleRange=plotSpace.xRange;
    x.labelOffset = -70;

    CPTXYAxis *y = axisSet.yAxis;
    y.majorIntervalLength         = CPTDecimalFromString(@"5.0");
    y.minorTicksPerInterval       = 10;
    y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"-1");

    }

1 ответ

  1. Я не уверен, что вы имеете в виду. Можете ли вы объяснить вопрос более четко?

  2. Вы никогда не добавляете места в xLocations задавать. Если customTickLocations массив содержит все нужные вам местоположения, просто установите местоположения галочек напрямую:

    x.majorTickLocations = [NSSet setWithArray:customTickLocations];
    
  3. Почему вы используете -expandRangeByFactor:? Если вы знаете желаемый диапазон графика, просто установите его напрямую:

    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0)
                                                length:CPTDecimalFromDouble(10.0)];
    
Другие вопросы по тегам