我无法获得包含所有情节点的图表以适合我的观点。
上面屏幕截图中显示的坐标为: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
,因为我的所有数字都是整数。
答案 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)];
现在我有了这个:
我仍然需要弄清楚如何显示X Axis
标签(如果我弄明白或者仍然接受答案,我会更新。)