柱形图
来源:互联网 发布:数据分析师是什么 编辑:程序博客网 时间:2024/05/17 06:47
NTChartView.h:
@interface NTChartView : UIView {
//组数据,只实现一个组
NSArray *groupData;
//最大值,最小值, 列宽度,
float maxValue,minValue,columnWidth,sideWidth,maxScaleValue,maxScaleHeight;
}
@property(retain,nonatomic) NSArray *groupData;
@end
NTChartView.m:
#import "NTChartView.h"
static int MARGIN_LEFT = 50;
static int MARGIN_BOTTOM = 30;
static int MARGIN_TOP = 20;
static int SHOW_SCALE_NUM = 5;
@interface NTChartView(private)
-(void)drawColumn:(CGContextRef)context rect:(CGRect)_rect;
-(void)drawScale:(CGContextRef)context rect:(CGRect)_rect;
-(void)calcScales:(CGRect)_rect;
@end
@implementation NTChartView
@synthesize groupData;
- (void) dealloc
{
[groupData release];
[super dealloc];
}
-(void)drawRect:(CGRect)_rect{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextFillRect(context, _rect);
//计算刻度
[self calcScales:_rect];
//画刻度
[self drawScale:context rect:_rect];
//画柱
[self drawColumn:context rect:_rect];
}
-(void)drawScale:(CGContextRef)context rect:(CGRect)_rect{
CGPoint points[3];
points[0] = CGPointMake(MARGIN_LEFT - 10, MARGIN_TOP);
points[1] = CGPointMake(MARGIN_LEFT -10, _rect.size.height - MARGIN_BOTTOM + 1);
points[2] = CGPointMake(_rect.size.width - 10, _rect.size.height - MARGIN_BOTTOM + 1);
CGContextSetAllowsAntialiasing(context, NO);
CGContextAddLines(context, points, 3);
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
for(int i=0;i<SHOW_SCALE_NUM + 1; i++){
maxScaleHeight = (_rect.size.height - MARGIN_BOTTOM) * ( i ) / (SHOW_SCALE_NUM + 1);
int vScal = ceil(1.0 * maxScaleValue / (SHOW_SCALE_NUM ) * (i ));
float y = (_rect.size.height - MARGIN_BOTTOM) -
maxScaleHeight;
NSString *scaleStr = [NSString stringWithFormat:@"%d",vScal];
[scaleStr
drawAtPoint:CGPointMake(MARGIN_LEFT - 20 - [scaleStr sizeWithFont:[UIFont systemFontOfSize:12]].width, y - 10) withFont:[UIFont systemFontOfSize:12]];
points[0] = CGPointMake(MARGIN_LEFT - 10, y);
points[1] = CGPointMake(MARGIN_LEFT - 13, y);
CGContextSetLineDash(context, 0, NULL, 0);
CGContextAddLines(context, points, 2);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextDrawPath(context, kCGPathStroke);
points[0] = CGPointMake(MARGIN_LEFT - 10, y);
points[1] = CGPointMake(_rect.size.width - 10 , y);
float partren[] = {2,3};
CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:.7 green:.7 blue:.7 alpha:1].CGColor);
CGContextSetLineDash(context, 0,partren , 2);
CGContextAddLines(context, points, 2);
CGContextDrawPath(context, kCGPathStroke);
}
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextDrawPath(context, kCGPathStroke);
CGContextSetAllowsAntialiasing(context, YES);
}
-(void)drawColumn:(CGContextRef)context rect:(CGRect)_rect{
int gNumber = 0, vNumber = 0;
int baseGroundY = _rect.size.height - MARGIN_BOTTOM, baseGroundX = MARGIN_LEFT;
CGPoint points[4];
UIColor *columnColor = [UIColor redColor];
CGContextSetFillColorWithColor(context, columnColor.CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
for(NSArray *g in groupData){
vNumber = 0;
for(NSNumber *v in g){
float columnHeight = [v floatValue] / maxScaleValue * maxScaleHeight ;
//画正面
CGContextSetFillColorWithColor(context, columnColor.CGColor);
CGContextAddRect(context, CGRectMake(vNumber * 20 + baseGroundX + columnWidth * vNumber
, baseGroundY - columnHeight
, columnWidth
, columnHeight));
CGContextDrawPath(context, kCGPathFill);
NSLog(@"columnHeight:%f, (_rect.size.height - MARGIN_TOP - MARGIN_BOTTOM ):%f",columnHeight,(_rect.size.height - MARGIN_TOP - MARGIN_BOTTOM ));
if(columnHeight < 10){
vNumber++;
continue;
}
//画右侧面
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:.9 green:0 blue:0 alpha:1].CGColor);
points[0] = CGPointMake(vNumber * 20 + baseGroundX + columnWidth * vNumber + columnWidth, baseGroundY - columnHeight -10);
points[1] = CGPointMake(vNumber * 20 + baseGroundX + columnWidth * vNumber + columnWidth + sideWidth, baseGroundY - columnHeight -10 );
points[2] = CGPointMake(vNumber * 20 + baseGroundX + columnWidth * vNumber + columnWidth + sideWidth, baseGroundY );
points[3] = CGPointMake(vNumber * 20 + baseGroundX + columnWidth * vNumber + columnWidth, baseGroundY );
CGContextAddLines(context, points, 4);
CGContextDrawPath(context, kCGPathFill);
//画上面
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:1 green:.4 blue:.4 alpha:1].CGColor);
points[0] = CGPointMake(vNumber * 20 + baseGroundX + columnWidth * vNumber , baseGroundY - columnHeight );
points[1] = CGPointMake(vNumber * 20 + baseGroundX + columnWidth * vNumber + sideWidth, baseGroundY - columnHeight -10 );
points[2] = CGPointMake(vNumber * 20 + baseGroundX + columnWidth * vNumber + columnWidth + sideWidth , baseGroundY - columnHeight -10 );
points[3] = CGPointMake(vNumber * 20 + baseGroundX + columnWidth * vNumber + columnWidth, baseGroundY - columnHeight );
CGContextAddLines(context, points, 4);
CGContextDrawPath(context, kCGPathFill);
vNumber++;
}
gNumber ++;
}
}
-(void)calcScales:(CGRect)_rect{
int columnCount = 0;
for(NSArray *g in groupData){
for(NSNumber *v in g){
if(maxValue<[v floatValue]) maxValue = [v floatValue];
if(minValue>[v floatValue]) minValue = [v floatValue];
columnCount++;
}
}
maxScaleValue = ((int)ceil(maxValue) + (SHOW_SCALE_NUM - (int)ceil(maxValue) % SHOW_SCALE_NUM));
columnWidth = (_rect.size.width - MARGIN_LEFT * 2) / (columnCount + 1);
sideWidth = columnWidth *.2;
columnWidth *= .8;
}
@end
调用:
NTChartView *v = [[NTChartView alloc] initWithFrame:CGRectMake(10, 10, 300, 300)];
NSArray *g = [NSArray arrayWithObject:[NSMutableArray arrayWithObjects:
[NSNumber numberWithFloat:18],
[NSNumber numberWithFloat:30],
[NSNumber numberWithFloat:16.5],
[NSNumber numberWithFloat:55],
[NSNumber numberWithFloat:40],nil]];
v.groupData = g;
[self.view addSubview:v];
[v release];
运行结果:
- 柱形图
- 柱形图
- 柱形图
- 柱形图
- 柱形图
- 柱形图
- JFreeChart柱形图
- 柱形图2
- dojo柱形图
- vc 柱形图
- JFreeChart 柱形图
- ECharts_01_柱形图
- asp vml 对比柱形图
- jfreechart柱形图链接问题
- php Jpgraph绘制柱形图
- struts开发-柱形图
- Jfreechart柱形图详细设置!
- Jpgraph绘制柱形图
- C语言的运算符
- PCB抄板秘籍
- 用C#的方式开发Silverlight
- PCB设计中的接地问题
- PCB布线的常见规则
- 柱形图
- Eclipse RCP中的进度条
- Linux下HTTP Server
- vc6.0 vs vs2005
- VIM 按鍵說明
- PCB技巧
- 创建角色,用户,权限
- Linux RAMDisk 源码分析
- zoj 3468 Dice War