シリアルポートからのデータをグラフ化し、それを単純なグラフにプロットする必要がある学校プロジェクト用の単純なココアアプリを作成しています。データプロットを生成して表示するためのフレームワークとして Core-Plot を選択しましたが、動作させることができません。
なんとか軸を描画し、プログラムは正常に実行されましたが、データ行は表示されません。次のコードを使用します。
#import "Controller.h"
#import <CorePlot/CorePlot.h>
@implementation Controller
-(void)dealloc
{
[plotData release];
[graph release];
[super dealloc];
}
-(void)awakeFromNib
{
[super awakeFromNib];
// Create graph from theme
graph = [(CPTXYGraph *)[CPTXYGraph alloc] initWithFrame:CGRectZero];
CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme];
[graph applyTheme:theme];
hostView.hostedGraph = graph;
// Setup scatter plot space
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(-1) length:CPTDecimalFromDouble(10)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(-1) length:CPTDecimalFromDouble(10.0)];
// Axes
// Label x axis with a fixed interval policy
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
CPTXYAxis *x = axisSet.xAxis;
x.majorIntervalLength = CPTDecimalFromString(@"1");
x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0.0");
x.minorTicksPerInterval = 2;
x.title = @"Tijd (s)";
x.titleOffset = 30.0;
x.titleLocation = CPTDecimalFromString(@"8.5");
// Label y with an automatic label policy.
CPTXYAxis *y = axisSet.yAxis;
y.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0.0");
y.minorTicksPerInterval = 2;
y.preferredNumberOfMajorTicks = 8;
y.labelOffset = 10.0;
y.title = @"Kracht (N)";
y.titleOffset = 30.0;
y.titleLocation = CPTDecimalFromString(@"8");
// Create a plot that uses the data source method
CPTScatterPlot *dataSourceLinePlot = [[[CPTScatterPlot alloc] init] autorelease];
dataSourceLinePlot.identifier = @"Date Plot";
CPTMutableLineStyle *lineStyle = [[dataSourceLinePlot.dataLineStyle mutableCopy] autorelease];
lineStyle.lineWidth = 3.f;
lineStyle.lineColor = [CPTColor greenColor];
dataSourceLinePlot.dataLineStyle = lineStyle;
dataSourceLinePlot.dataSource = self;
[graph addPlot:dataSourceLinePlot];
// Add some data
NSMutableArray *contentArray = [NSMutableArray array];
for ( NSUInteger i = 0; i < 10; i++ ) {
id x = [NSDecimalNumber numberWithDouble:i];
id y = [NSDecimalNumber numberWithDouble:1.2];
[contentArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y", nil]];
NSLog(@"waarde %@", contentArray);
}
NSLog(@"plotting");
plotData = [contentArray retain];
}
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot
{
return plotData.count;
}
@end
コードは、例の 1 つに基づいています。
NSLog(@"waarde %@", contentArray); 正しいデータポイントを含む見栄えの良い配列を返します。