如何在 CorePlot - 堆积条形图上显示条形值
How to show bar values on CorePlot -Stacked bar chart
我已经使用 core-plot
在我的应用程序中显示堆积条形图,我按照这个很好的教程来实现堆积条形图,现在图形如下所示。
“http://www.gilthonwe.com/2012/06/09/stacked-bar-chart-coreplot-ios/”
我使用以下代码在用户触摸屏幕时显示条形值。
-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
{
if (plot.isHidden == YES) {
return;
}
static CPTMutableTextStyle *style = nil;
if (!style) {
style = [CPTMutableTextStyle textStyle];
style.color= [CPTColor yellowColor];
style.fontSize = 16.0f;
style.fontName = @"Helvetica-Bold";
}
NSNumber *price = [NSNumber numberWithDouble:[self doubleForPlot:plot field:CPTBarPlotFieldBarTip recordIndex:index]];
if (!self.priceAnnotation) {
NSNumber *x = [NSNumber numberWithInt:0];
NSNumber *y = [NSNumber numberWithInt:0];
NSArray *anchorPoint = [NSArray arrayWithObjects:x, y, nil];
self.priceAnnotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:plot.plotSpace anchorPlotPoint:anchorPoint];
}
static NSNumberFormatter *formatter = nil;
if (!formatter) {
formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:2];
}
// 5 - Create text layer for annotation
NSString *priceValue = [formatter stringFromNumber:price];
CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:priceValue style:style];
self.priceAnnotation.contentLayer = textLayer;
NSLog(@"barWasSelectedAtRecordIndex %lu", (unsigned long)index);
NSInteger plotIndex = 0;
if ([plot.identifier isEqual:[sets objectForKey:@"Due"]] == YES) {
plotIndex = 0;
} else if ([plot.identifier isEqual:[sets objectForKey:@"Overdue"]] == YES) {
plotIndex = 1;
} else if ([plot.identifier isEqual:[sets objectForKey:@"Paid"]] == YES) {
plotIndex = 2;
}
CGFloat x =10.00;
NSNumber *anchorX = [NSNumber numberWithFloat:x];
CGFloat y = 10.00;
NSNumber *anchorY = [NSNumber numberWithFloat:y];
self.priceAnnotation.anchorPlotPoint = [NSArray arrayWithObjects:anchorX, anchorY, nil];
// 8 - Add the annotation
[plot.graph.plotAreaFrame.plotArea addAnnotation:self.priceAnnotation];
}
以上代码的响应见图
这里我面临几个问题
1.The 值未显示在所选栏上方的确切位置。
- 考虑蓝条值=8,绿条值=6,红条值=7
如果我单击蓝色条,则会显示该条的确切值。
Display Value=8
如果我单击绿色条,我将获得蓝色条值和绿色条值的累计和值。
Display Value=14
如果我单击红色条,我将获得蓝色、绿色、红色条的累计值。
Display Value=21
当用户触摸屏幕中的条时,如何在所选条上的确切位置显示准确的条值?
问题中的代码显示所选柱的 "tip" 值。在这种情况下,这是酒吧的顶部。如果您想要所选线段的长度,请减去条形的 "base" 值。
我已经使用 core-plot
在我的应用程序中显示堆积条形图,我按照这个很好的教程来实现堆积条形图,现在图形如下所示。
“http://www.gilthonwe.com/2012/06/09/stacked-bar-chart-coreplot-ios/”
我使用以下代码在用户触摸屏幕时显示条形值。
-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
{
if (plot.isHidden == YES) {
return;
}
static CPTMutableTextStyle *style = nil;
if (!style) {
style = [CPTMutableTextStyle textStyle];
style.color= [CPTColor yellowColor];
style.fontSize = 16.0f;
style.fontName = @"Helvetica-Bold";
}
NSNumber *price = [NSNumber numberWithDouble:[self doubleForPlot:plot field:CPTBarPlotFieldBarTip recordIndex:index]];
if (!self.priceAnnotation) {
NSNumber *x = [NSNumber numberWithInt:0];
NSNumber *y = [NSNumber numberWithInt:0];
NSArray *anchorPoint = [NSArray arrayWithObjects:x, y, nil];
self.priceAnnotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:plot.plotSpace anchorPlotPoint:anchorPoint];
}
static NSNumberFormatter *formatter = nil;
if (!formatter) {
formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:2];
}
// 5 - Create text layer for annotation
NSString *priceValue = [formatter stringFromNumber:price];
CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:priceValue style:style];
self.priceAnnotation.contentLayer = textLayer;
NSLog(@"barWasSelectedAtRecordIndex %lu", (unsigned long)index);
NSInteger plotIndex = 0;
if ([plot.identifier isEqual:[sets objectForKey:@"Due"]] == YES) {
plotIndex = 0;
} else if ([plot.identifier isEqual:[sets objectForKey:@"Overdue"]] == YES) {
plotIndex = 1;
} else if ([plot.identifier isEqual:[sets objectForKey:@"Paid"]] == YES) {
plotIndex = 2;
}
CGFloat x =10.00;
NSNumber *anchorX = [NSNumber numberWithFloat:x];
CGFloat y = 10.00;
NSNumber *anchorY = [NSNumber numberWithFloat:y];
self.priceAnnotation.anchorPlotPoint = [NSArray arrayWithObjects:anchorX, anchorY, nil];
// 8 - Add the annotation
[plot.graph.plotAreaFrame.plotArea addAnnotation:self.priceAnnotation];
}
以上代码的响应见图
这里我面临几个问题
1.The 值未显示在所选栏上方的确切位置。
- 考虑蓝条值=8,绿条值=6,红条值=7
如果我单击蓝色条,则会显示该条的确切值。
Display Value=8
如果我单击绿色条,我将获得蓝色条值和绿色条值的累计和值。
Display Value=14
如果我单击红色条,我将获得蓝色、绿色、红色条的累计值。
Display Value=21
当用户触摸屏幕中的条时,如何在所选条上的确切位置显示准确的条值?
问题中的代码显示所选柱的 "tip" 值。在这种情况下,这是酒吧的顶部。如果您想要所选线段的长度,请减去条形的 "base" 值。