単純なグラフをプロットしようとしています (それほど難しいことではありません! 以前にコア プロットをうまく使用したことがあります!)。x 軸にプロットする日付がいくつかあります。そして、0.139503、0.139481 などの y 軸のいくつかの小さな float 値。(バックエンドから取得した) 5 つのそのような値をプロットする必要があります。y 軸の範囲については、これらの値の最小値を見つけて、y 軸の範囲の開始として設定しています。そして、majorIntervalLength を (highestValue - LowestValue)/5 に設定しています。これは (たとえば) 0.007946 です。しかし、y 軸の間隔は 1 の間隔で固定されているようです。したがって、私の y 軸の値は非常に小さいため (それらの差は 0.01 のオーダーです)、すべてのプロットは y=0.0 で描画されています。コード スニペットは次のとおりです。
-(void) initializeGraph {
if ((self.graph == nil) || (self.graph == NULL)) {
self.graphHostView = [(CPTGraphHostingView *) [CPTGraphHostingView alloc] initWithFrame:self.view.bounds];
self.graph = [[CPTXYGraph alloc] initWithFrame:self.graphHostView.bounds];
graph.paddingLeft = 2.0;
graph.paddingRight = 2.0;
graph.paddingTop = 2.0;
graph.paddingBottom = 2.0;
graph.title = @"Graph Plot";
// plotting style is set to line plots
CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle];
lineStyle.lineColor = [CPTColor blackColor];
lineStyle.lineWidth = 2.0f;
CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.graph.axisSet;
axisSet.xAxis.majorTickLineStyle = lineStyle;
axisSet.xAxis.majorTickLength = 7.0f;
axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyEqualDivisions;
axisSet.yAxis.labelingPolicy = CPTAxisLabelingPolicyEqualDivisions;
axisSet.xAxis.labelRotation = 90.0;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) self.graph.defaultPlotSpace;
// Determine the lowest and highest values to be plotted in Y Axis)
CGFloat yLow = 0.1;
CGFloat yHigh = yLow;
for (int i=0 ; i<self.dict.count ; i++) {
MyCustomObject *myData = (MyCustomObject *) [dict objectForKey:
[self.arrayKeys objectAtIndex:i]];
if (myData.mem < yLow) {
yLow = myData.mem;
}
if (yHigh < myData.mem) {
yHigh = myData.mem;
}
}
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)
length:CPTDecimalFromFloat(5)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yLow)
length:CPTDecimalFromFloat(5)];
// To determine the point where your graph starts
//axisSet.yAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(yLow);
axisSet.yAxis.majorIntervalLength = CPTDecimalFromCGFloat((yHigh-yLow)/5.0);
NSLog(@"Y axis interval : %f", (yHigh-yLow)/5.0);
...
}
-(NSNumber *) numberForPlot:(CPTPlot *)plot
field:(NSUInteger)fieldEnum
recordIndex:(NSUInteger)index {
if ( fieldEnum == CPTScatterPlotFieldY ) {
return [NSNumber numberWithFloat:myData.mem];
} else {
return [NSNumber numberWithInt:index];
}
}
設定している y 軸の majorIntervalLength が機能しないのはなぜですか?