0

我无法让所有绘图点都适合我的视图。

在此处输入图像描述 上面屏幕截图中显示的坐标是:x=1, y=10 and x=2, y=0

这是我的UIViewController( GraphingViewController) 的屏幕截图,我在这里嵌套了一个单独的视图,它是图表的主机视图。我的图形代码与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

4 回答 4

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]))];
于 2013-02-19T21:43:49.637 回答
1

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

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

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

于 2013-02-20T23:54:57.870 回答
0

你试过 scaleToFitPlots 方法吗?

 [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:scatterPlot, nil]];
于 2013-02-19T18:16:27.833 回答
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)];

所以现在我有了这个:

在此处输入图像描述

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

于 2013-02-19T19:12:07.873 回答