目标:为每个数据生成固定宽度的月份列。
问题:列宽因每个#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标签将x轴与许多数字(1.0 - x.0)相混淆。
也尝试过: a)改变plotSpace.xRange;和 b)改变x.majorIntervalLength。
偏好:自定义标签:CPTAxisLabelingPolicyFixedInterval
P.S。我假设扩大细柱(数据较少)只会绘制一个外推到下个月的下一个数据点;无需填写任何缺失的数据点以等于邻近月份的点数。
============================
基于评论的解决方案:
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个月的固定分布:[4月,5月,6月,7月,8月];对于5个刻度位置。
...来自plot_gallery_ios示例。
答案 0 :(得分:0)
您可以使用CPTAxisLabelingPolicyFixedInterval
标签政策和创建月标签的labelFormatter
。 Core Plot提供了两种可能有用的日期格式器:CPTCalendarFormatter和CPTTimeFormatter。您选择哪一个取决于您如何编码数据集中的日期值。