Точки данных не отображаются при использовании Core Plot - PullRequest
1 голос
/ 10 марта 2012

Я делаю график для приложения для iOS, используя Core Plot 1.0 и iOS 5.1.

Я просмотрел все учебные пособия, которые я могу найти для основного графика, и на графике отображается все, кромесами данные диаграммы рассеяния ...

Невозможно опубликовать снимок экрана из-за репутации, поэтому вот ссылка на него: http://francoismaillet.com/coreplot_problem.png

Я использую методы numberOfRecordsForPlot и numberForPlot из Пример SimpleScatterPlot.m .Метод generateData генерирует числа от 0 до 2.

Я крутился кругами некоторое время, и любая помощь будет принята с благодарностью.

Вот мой интерфейс класса:

interface PriceChartViewController : UIViewController <CPTPlotDataSource, CPTScatterPlotDelegate>{
    NSArray *plotData;
}

Вот мой метод viewDidLoad:

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

    CPTGraphHostingView *hostingView = [[CPTGraphHostingView alloc] initWithFrame:self.view.bounds];

    CPTXYGraph *graph = [[[CPTXYGraph alloc] initWithFrame:self.view.bounds] autorelease];
    CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme];
    [graph applyTheme:theme];

    hostingView.hostedGraph = graph;
    //hostingView.collapsesLayers = YES;

    graph.paddingLeft   = 15.0;
    graph.paddingTop    = 40.0;
    graph.paddingRight  = 15.0;
    graph.paddingBottom = 40.0;


    // Get plotSpace from graph
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-2)
                                                   length:CPTDecimalFromFloat(4)];
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-2)
                                                   length:CPTDecimalFromFloat(4)];

    [graph addPlotSpace:plotSpace];


    // Get axisset from graph
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;


    CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle];
    majorGridLineStyle.lineWidth = 1.0f;
    majorGridLineStyle.lineColor = [[CPTColor whiteColor] colorWithAlphaComponent:0.75f];

    CPTMutableLineStyle *minorGridLineStyle = [CPTMutableLineStyle lineStyle];
    minorGridLineStyle.lineWidth = 1.0f;
    minorGridLineStyle.lineColor = [[CPTColor whiteColor] colorWithAlphaComponent:0.25f];


    CPTXYAxis *x = axisSet.xAxis;
    x.title = @"X axis";
    x.titleOffset = -20.0f;
    x.titleLocation = CPTDecimalFromFloat(30.0f);

    x.majorGridLineStyle = majorGridLineStyle;
    x.minorGridLineStyle = minorGridLineStyle;

    x.majorIntervalLength = CPTDecimalFromInteger(1);
    x.minorTicksPerInterval = 0.5;
    x.plotSpace = plotSpace;       


    CPTXYAxis *y = axisSet.yAxis;
    y.majorIntervalLength = CPTDecimalFromInteger(1);
    y.minorTicksPerInterval = 0.5;
    //y.orthogonalCoordinateDecimal = CPTDecimalFromInteger(-0.5);
    //y.preferredNumberOfMajorTicks = 8;
    y.plotSpace = plotSpace;


    // Create scatterplot
    CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init];
    dataSourceLinePlot.identifier = @"AllTests";

    CPTMutableLineStyle *lineStyle   = [[dataSourceLinePlot.dataLineStyle mutableCopy] autorelease];
    //lineStyle.miterLimit             = 1.0f;
    lineStyle.lineWidth              = 3.0f;
    lineStyle.lineColor              = [CPTColor blueColor];
    dataSourceLinePlot.dataLineStyle = lineStyle;
    dataSourceLinePlot.dataSource    = self;
    [graph addPlot:dataSourceLinePlot];

    // Do a blue gradient
    CPTColor *areaColor1        = [CPTColor colorWithComponentRed:0.3 green:0.3 blue:1.0 alpha:0.8];
    CPTGradient *areaGradient1  = [CPTGradient gradientWithBeginningColor:areaColor1 endingColor:[CPTColor clearColor]];
    areaGradient1.angle         = -90.0f;
    CPTFill *areaGradientFill   = [CPTFill fillWithGradient:areaGradient1];
    dataSourceLinePlot.areaFill = areaGradientFill;
    dataSourceLinePlot.areaBaseValue = [[NSDecimalNumber zero] decimalValue];

    // Auto scale the plot space to fit the plot data
    // Extend the ranges by 30% for neatness
    [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:dataSourceLinePlot, nil]];
    CPTMutablePlotRange *xRange = [[plotSpace.xRange mutableCopy] autorelease];
    CPTMutablePlotRange *yRange = [[plotSpace.yRange mutableCopy] autorelease];
    [xRange expandRangeByFactor:CPTDecimalFromDouble(1.3)];
    [yRange expandRangeByFactor:CPTDecimalFromDouble(1.3)];
    plotSpace.xRange = xRange;
    plotSpace.yRange = yRange;


    graph.legend                     = [CPTLegend legendWithGraph:graph];
    graph.legend.textStyle           = x.titleTextStyle;
    graph.legend.fill                = [CPTFill fillWithColor:[CPTColor darkGrayColor]];
    graph.legend.borderLineStyle     = x.axisLineStyle;
    graph.legend.cornerRadius        = 5.0;
    graph.legend.swatchSize          = CGSizeMake(25.0, 25.0);
    graph.legendAnchor               = CPTRectAnchorBottom;
    graph.legendDisplacement         = CGPointMake(0.0, 12.0);


    [self setView:hostingView];
}

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Оказалось, что код работал нормально, когда я пытался использовать последний базовый исходный сюжет (ревизия 6f43faadc647), что странно, поскольку, похоже, ничего не изменилось после выпуска 1.0.

0 голосов
/ 14 марта 2012

Удалить эту строку:

[graph addPlotSpace:plotSpace];

Вы установили оси, используя одно пространство графика, и добавили график в другое.Если вы делаете все с использованием стандартного пространства печати, оно должно работать нормально.Я не вижу необходимости в двух разных пространствах графиков на таком простом графике, как этот.

...