目標:データごとに固定幅の月の列を生成すること。
問題:列幅は #data ポイントごとに異なります。したがって、特定の月のデータが不足しているため、一部のラベルは一緒にクラスター化されます
(たとえば、「JanFeb」と「Jan....Feb」)。
次のコード スニペットは、新しいラベル/月を作成しますが、x 軸にラベルを静的に配置する制御はありません。したがって、その特定の月のデータ項目がほとんどない場合 (ポイントが少ない場合)、一部のラベルがマージされる場合があります。
for (PerformanceDataItem *item in perfDataArray) {
if (![item.month isEqualToString:currentMonth]) {
currentMonth = item.month;
CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText:item.month textStyle:x.labelTextStyle];
newLabel.tickLocation = [[NSDecimalNumber numberWithInt:index] decimalValue];
newLabel.offset = 2;
[customLabels addObject:newLabel];
[newLabel release];
}
++index;
} // end for().
x.axisLineStyle = nil;
x.majorTickLineStyle = nil;
x.minorTickLineStyle = nil;
x.labelingPolicy = CPTAxisLabelingPolicyNone;
NSSet* customlabelSet = [NSSet setWithArray:customLabels];
x.axisLabels = customlabelSet;
質問:データをプロットするためにカスタマイズされた固定幅の列セットを作成するにはどうすればよいですか?
...単に x.labelingPolicy を設定するだけです
CPTAxisLabelingPolicyFixedInterval自分の NSString ラベルを使用するのに対して、多くの数字 (1.0 - x.0) で x 軸が乱雑になります。
また試してみました: a)plotSpace.xRangeを変更します。b) x.majorIntervalLength の変更。
設定: custom-label for:CPTAxisLabelingPolicyFixedInterval
PS 薄い列 (データが少ない) を広げることは、翌月の次のデータ ポイントへの外挿をプロットするだけであると想定しています。欠落しているデータ ポイントを埋めて、隣接する月のポイント セットと等しくする必要はありません。
============================
コメントに基づく解決策:
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger(0) 長さ:CPTDecimalFromUnsignedInteger(100)];
axisFixedInterval.majorIntervalLength = CPTDecimalFromDouble(25.0); NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
// Set begining date to April 1, 2012: [dateComponents setMonth:4]; [dateComponents setDay:1]; [dateComponents setYear:2012]; [dateComponents setHour:0]; [dateComponents setMinute:0]; [dateComponents setSecond:0]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *refDate = [gregorian dateFromComponents:dateComponents]; [dateComponents release]; [gregorian release]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateStyle = kCFDateFormatterMediumStyle; [dateFormatter setDateFormat:@"MMM"]; CPTCalendarFormatter *calFormatter = [[[CPTCalendarFormatter alloc] initWithDateFormatter:dateFormatter] autorelease]; calFormatter.referenceDate = refDate; calFormatter.referenceCalendarUnit = kCFCalendarUnitMonth; axisFixedInterval.labelFormatter = calFormatter; [dateFormatter release];
...これにより、3文字の月の固定分布が得られます: [Apr、May、Jun、Jul、Aug]; 5の目盛りの場所。
... plot_gallery_ios の例から。