核心情节不缩放

时间:2013-02-19 16:15:39

标签: ios core-plot

我无法获得包含所有情节点的图表以适合我的观点。

enter image description here 上面屏幕截图中显示的坐标为:x=1, y=10 and x=2, y=0

这是我的UIViewControllerGraphingViewController)的屏幕截图 我有一个单独的视图嵌套在这里,这是图的主机视图。我的图表代码与SimpleScatterPlot.m完全相同,但我自定义的生成数据方法除外:

-(void)generateData
{
    NSMutableArray *contentArray = [NSMutableArray array];
    int counter = 0;
    for (NSNumber * entryValue in self.plotDataArray) {
        counter++;
        id x = [NSDecimalNumber numberWithInt:counter];
        id y = [NSDecimalNumber numberWithInt:[entryValue intValue]];
        [contentArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y", nil]];
        NSLog(@"setting values for graph x: %@ and y: %@",x,y);
    }
    plotData = [contentArray retain];
}

另一件奇怪的事情是我可以向左和向右滚动但不能向上或向下滚动。我在先前的更改中x,y从0,0开始,但隐藏了x轴,所以虽然它是我想要的,但我不能隐藏该行。

如何在0,0启动图表并将其缩放为不仅可以查看所有点,还可以查看标签(“X Axis”,“Y Axis”) ? 正如您所见,Y轴也是.2,X是.5。这些应该是1,因为我的所有数字都是整数。

4 个答案:

答案 0 :(得分:1)

我实施它的方式是一样的。我跟踪数据中的最小和最大X和Y值,然后相应地设置绘图范围。

// Adjust the plot space according to the min and max x/y values
plotSpace.xRange = [[CPTPlotRange alloc] initWithLocation:CPTDecimalFromInt([self.minTime intValue]) length:CPTDecimalFromInt ([self.maxTime intValue] - [self.minTime intValue])];
plotSpace.yRange = [[CPTPlotRange alloc] initWithLocation:CPTDecimalFromInt([self.minScore intValue]) length:CPTDecimalFromInt (([self.maxScore intValue] - [self.minScore intValue]))];

答案 1 :(得分:1)

保持轴标签可见的简单方法是设置titleLocation。默认值NAN将标签定位在绘图区域的中心。

globalYRange阻止垂直滚动。默认值nil不限制滚动。如果您确实需要限制滚动,但需要更改绘图范围以显示新数据,请将全局范围设置为nil,更新绘图范围并重置全局范围。

刻度线位置和轴标签由轴标签策略控制。默认的固定间隔策略将起作用,只需将majorIntervalLength保留为默认值1(1)。

答案 2 :(得分:0)

您是否尝试过scaleToFitPlots方法?

 [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:scatterPlot, nil]];

答案 3 :(得分:0)

我解决了问题的一部分,即没有显示的高点。这行代码限制了最大Y Axis

CPTPlotRange *globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f)
                                                          length:CPTDecimalFromFloat(2.0f)];

所以我创建了一个属性来跟踪最大值并将其设置为:

CPTPlotRange *globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f)
                                                          length:CPTDecimalFromFloat(self.largestYvalue)];

现在我有了这个:

enter image description here

我仍然需要弄清楚如何显示X Axis标签(如果我弄明白或者仍然接受答案,我会更新。)