[英]Shifted Core Plot x-axis labels
我使用Core Plot创建了一个图表,并使用以下方法来缩放该图:
[plotSpace scaleToFitPlots:[graph allPlots]
当数据以0值开头时,图表可以完美显示
但是,如果数据仅包含比零更高的值,则x轴的标签将发生偏移。
(上表使用的数据仅在23到107之间)
标签不移位该怎么办?
这是代码:
- (void)viewDidLoad {
[super viewDidLoad];
CPTXYGraph *graph = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
self.chartView.hostedGraph = graph;
CGRect rect = [self.chartView frame];
CPTScatterPlot *scatterPlot = [[CPTScatterPlot alloc] initWithFrame:rect];
scatterPlot.dataSource = self;
[scatterPlot setAreaBaseValue: [NSNumber numberWithInt:0]];
[graph addPlot:scatterPlot];
CPTTheme *theme = [CPTTheme themeNamed:kCPTSlateTheme];
[graph applyTheme:theme];
graph.plotAreaFrame.masksToBorder = NO;
graph.paddingLeft = 0.0f;
graph.paddingTop = 0.0f;
graph.paddingRight = 0.0f;
graph.paddingBottom = 0.0f;
graph.plotAreaFrame.paddingTop = 10.0;
graph.plotAreaFrame.paddingRight = 10.0;
graph.plotAreaFrame.paddingBottom = 20.0;
graph.plotAreaFrame.paddingLeft = 50.0;
// Y axis configuration
CPTXYAxisSet *axisSet= (CPTXYAxisSet *)graph.axisSet;
CPTXYAxis *y = axisSet.yAxis;
y.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
// X axis configuration
CPTXYAxis *x = axisSet.xAxis;
x.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
x.minorTicksPerInterval = 4;
// X axis label formatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm"];
[NSTimeZone resetSystemTimeZone];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter];
timeFormatter.referenceDate = [NSDate dateWithTimeIntervalSinceReferenceDate:0];
x.labelFormatter = timeFormatter;
[graph.defaultPlotSpace scaleToFitPlots:[graph allPlots]];
}
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot{
return self.data.count;
}
- (id)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx{
MyData *d = self.data[idx];
if (fieldEnum == CPTScatterPlotFieldX){
NSNumber *seconds = [self secondsFromDate: d.nsDate];
return seconds;
}else if (fieldEnum == CPTScatterPlotFieldY){
return d.in;
}
return nil;
}
您可以使用axisConstraints
将轴锁定在绘图区域的边缘。
x.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.