iphone - 如何在iPhone中实现条形图?

标签 iphone core-plot bar-chart

我正在开发简单的条形图应用程序,使用Coreplot来开发这个应用程序,然后我尝试实现条形图,但我在

中发现了问题
  [__NSCFConstantString sizeWithTextStyle:]: unrecognized selector sent to instance 0x7fb4c'
   First throw call stack:

如何解决这个问题? 请帮助我

提前致谢

我尝试过:

Viewcontroller.h

#import <UIKit/UIKit.h>
#import "CorePlot-CocoaTouch.h"


@interface GraphViewController : UIViewController <CPTPlotDataSource>
{
    CPTXYGraph *barChart;
    NSTimer *timer;
    NSMutableArray *samples;
}

-(void) getGraphValues;

@end

Viewcontroller.m

 - (void)viewDidLoad
    {
        [super viewDidLoad];

        self.view.backgroundColor=[UIColor whiteColor];
        self.title = @"Sample";
        self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
        [self.navigationController setNavigationBarHidden:NO];

        [self getGraphValues];

        double xAxisLength = [samples count];

        barChart = [[CPTXYGraph alloc] initWithFrame:CGRectMake(0, 0, 320, 380)];

        barChart.plotAreaFrame.borderLineStyle = nil;
        barChart.plotAreaFrame.cornerRadius = 0.0f;

        barChart.paddingLeft = 0.0f;
        barChart.paddingRight = 0.0f;
        barChart.paddingTop = 0.0f;
        barChart.paddingBottom = 0.0f;

        barChart.plotAreaFrame.paddingLeft = 60.0;
        barChart.plotAreaFrame.paddingTop = 40.0;
        barChart.plotAreaFrame.paddingRight = 10.0;
        barChart.plotAreaFrame.paddingBottom = 40.0;

        barChart.title = @"Sample Innovations";

        CPTMutableTextStyle *textStyle = [CPTTextStyle textStyle];
        textStyle.color = [CPTColor grayColor];
        textStyle.fontSize = 16.0f;
        textStyle.textAlignment = CPTTextAlignmentCenter;
        barChart.titleTextStyle = textStyle;  // Error found here
        barChart.titleDisplacement = CGPointMake(0.0f, -10.0f);
        barChart.titlePlotAreaFrameAnchor = CPTRectAnchorTop;

        CPTXYAxisSet *axisSet = (CPTXYAxisSet *)barChart.axisSet;
        CPTXYAxis *x = axisSet.xAxis;
        x.axisLineStyle = nil;
        x.majorTickLineStyle = nil;
        x.minorTickLineStyle = nil;
        x.majorIntervalLength = CPTDecimalFromString(@"10");
        x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0");
        x.title = @"Names";
        x.titleLocation = CPTDecimalFromFloat(7.5f);
        x.titleOffset = 25.0f;

        // Define some custom labels for the data elements
        x.labelRotation = M_PI/5;
        x.labelingPolicy = CPTAxisLabelingPolicyNone;

        NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:0], [NSDecimalNumber numberWithInt:1], [NSDecimalNumber numberWithInt:2], [NSDecimalNumber numberWithInt:3], [NSDecimalNumber numberWithInt:4], nil];


        NSArray *xAxisLabels = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", @"e", nil];
        NSUInteger labelLocation = 0;

        NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]];
        for (NSNumber *tickLocation in customTickLocations) 
        {
            CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText: [xAxisLabels objectAtIndex:labelLocation++] textStyle:x.labelTextStyle];
            newLabel.tickLocation = [tickLocation decimalValue];
            newLabel.offset = x.labelOffset + x.majorTickLength;
            newLabel.rotation = M_PI/xAxisLength;
            [customLabels addObject:newLabel];
        }

        x.axisLabels =  [NSSet setWithArray:customLabels];

        CPTXYAxis *y = axisSet.yAxis;
        y.axisLineStyle = nil;
        y.majorTickLineStyle = nil;
        y.minorTickLineStyle = nil;
        y.majorIntervalLength = CPTDecimalFromString(@"50");
        y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0");
        y.title = @"Work Status";
        y.titleOffset = 40.0f;
        y.titleLocation = CPTDecimalFromFloat(150.0f);

        CPTGraphHostingView *hostingView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(0, 0, 320, 360)];
        hostingView.hostedGraph = barChart;
        [self.view addSubview:hostingView];

        CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) barChart.defaultPlotSpace;
        plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0f) length:CPTDecimalFromDouble(16.0f)];
        plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0f) length:CPTDecimalFromDouble(500.0f)];

        CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:NO];
        barPlot.plotRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromDouble(10)];//xAxisLength
        barPlot.barOffset = CPTDecimalFromFloat(0.25f);
        barPlot.baseValue = CPTDecimalFromString(@"0");
        barPlot.barWidth = CPTDecimalFromFloat(10.0f);
        barPlot.cornerRadius = 2.0f;
        barPlot.dataSource = self;
        [barChart addPlot:barPlot];
    }

    -(void) getGraphValues
    {
        int barValues [] = {10,50,100,200};//,150,200,10,20,30,40,50,100,400,450,350
        int barNums = sizeof(barValues) / sizeof(int);

        samples = [[NSMutableArray alloc] initWithCapacity:barNums];

        for (int i = 0; i < 4; i++)
        {
            double x = i;
            double y = barValues[i];
            NSLog(@"XVal : %@", X_VAL);
            NSDictionary *sample = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithDouble:30],X_VAL,[NSNumber numberWithDouble:y],Y_VAL,nil];
            [samples addObject:sample];
        }   
    }


-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot 
{
    return [samples count];
}

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{
    NSDictionary *sample = [samples objectAtIndex:index];

    if (fieldEnum == CPTScatterPlotFieldX)
        return [sample valueForKey:X_VAL];
    else
        return [sample valueForKey:Y_VAL];
}

最佳答案

确保在build设置中设置了-all_load“其他链接器标志”。该标志强制系统加载所有类别方法,例如 -sizeWithTextStyle:

关于iphone - 如何在iPhone中实现条形图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12330501/

相关文章:

javascript - 从 Web 应用程序访问 iPhone 上的位置信息

iphone - 如何修改自定义GCD队列的优先级?

ios - 提高核心情节的表现

iphone - UIImagePickerController 检查用户是否编辑了图像

iphone - 使用超过 6 个自定义按钮时 UIActionSheet buttonIndex 值错误?

objective-c - 为什么我的图表如此不稳定?

ios - 核心剧情: Two color axis label

r - 堆叠条形图中每个条形的不同颜色 - 基础图形

r - R中的重叠圆形多个条形图

python - 使用 matplotlib.widgets 中的 slider 后如何获取条形图值?