`
jsntghf
  • 浏览: 2529790 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

柱状图

    博客分类:
  • iOS
阅读更多

#import <CoreGraphics/CoreGraphics.h>

#define kMaxLine 240
#define kXStartPoint 40

- (void)drawRect:(CGRect)rect {	
	CGContextRef context = UIGraphicsGetCurrentContext();	
	CGContextSetRGBFillColor(context, 0.5, 0.21, 0.52, 1.0);	
	CGContextFillRect(context, CGRectMake(0, 0, 320, 480));
	CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);	
	CGContextMoveToPoint(context, kXStartPoint, 120);	
	CGContextAddLineToPoint(context, kXStartPoint, 360);	
	CGContextAddLineToPoint(context, 280, 360);	
	CGContextSetLineWidth(context, 5);	
	CGContextStrokePath(context);
	
	NSArray *voteNum = [[NSArray alloc] initWithObjects:@"850000", @"526000", @"750800", @"360500", nil];	
	NSArray *voteItemName = [[NSArray alloc] initWithObjects:@"奥迪", @"别克", @"凯迪拉克", @"大众", nil];
	NSMutableArray *voteNumberStrArry = [[NSMutableArray alloc] init];	
	NSInteger voteNumBiggest = 0;	
	NSInteger Max = 0;	
	NSInteger numOfItem = [voteNum count];
	NSInteger vote_num;
	NSString *voteNumStr;
	NSInteger temp = 0;
	NSInteger c = 0;
	
	for (int i = 0; i < [voteNum count]; i++) {		
		NSInteger a = [[voteNum objectAtIndex:i] integerValue];
		if (c != 0) {
			if (c >= a) {
				temp = c;
				a = temp;	
				c = a;	
			} else {
				temp = a;	
			} 	
		}
		c = a; 
		voteNumBiggest = temp;
	}
	
	for (int i = 0; i < [voteNum count]; i++) {
		vote_num = [[voteNum objectAtIndex:i] integerValue];
		float oneVoteNum = 0.0;
		if (voteNumBiggest > 0 && voteNumBiggest <= 10) {
			oneVoteNum = vote_num * 24.0;
			Max = 10;	
		} else if (voteNumBiggest > 10 && voteNumBiggest <= 100) {
			oneVoteNum = vote_num * 2.4;
			Max = 100;
		} else if(voteNumBiggest > 100 && voteNumBiggest <= 500) {
			oneVoteNum = vote_num * 0.48;
			Max = 500;
		} else if(voteNumBiggest > 500 && voteNumBiggest <= 1000) {
			oneVoteNum = vote_num * 0.24;
			Max = 1000;
		} else if(voteNumBiggest > 1000 &&voteNumBiggest <= 5000) {
			oneVoteNum = vote_num * 0.048;
			Max = 5000;
		} else if(voteNumBiggest >5000 && voteNumBiggest <= 10000) {
			oneVoteNum = vote_num * 0.024;
			Max = 10000;
		} else if(voteNumBiggest > 10000 && voteNumBiggest <= 100000) {
			oneVoteNum = vote_num * 0.0024;
			Max = 100000;
		} else if(voteNumBiggest > 100000 && voteNumBiggest <= 1000000) {
			oneVoteNum = vote_num * 0.00024;
			Max = 1000000;
		}      
		voteNumStr = [NSString stringWithFormat:@"%f", oneVoteNum];
		[voteNumberStrArry addObject:voteNumStr];	
	}
	
	for (int i = 0; i < numOfItem; i++) {
		CGContextSetLineWidth(context, 3);
		CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
		float legPointY = 0.0;
		float q1 = numOfItem + 1;
		float q2 = i + 1;
		float q = q2 / q1 ;
		legPointY = 120 + kMaxLine * q;
		float a = [[voteNumberStrArry objectAtIndex:i] floatValue];
		UIImage *myImage = [[UIImage imageNamed:@"1.png"] stretchableImageWithLeftCapWidth:0.5 topCapHeight:10 ];
		CGRect imageRect = CGRectMake(kXStartPoint, legPointY, a, 20);
		[myImage drawInRect:imageRect];
		CGRect rectangle = CGRectMake(kXStartPoint, legPointY, a, 20);
		CGContextAddRect(context, rectangle);
		CGContextStrokePath(context);
		[[UIColor greenColor] set];
		NSString *n = [voteItemName objectAtIndex:i];
		CGSize mSize = [n sizeWithFont:[UIFont systemFontOfSize:12.0] forWidth:100 lineBreakMode:UILineBreakModeTailTruncation];
		[n drawInRect:CGRectMake(50, rectangle.origin.y - 20, mSize.width, mSize.height) withFont:[UIFont systemFontOfSize:12.0]];
		[[voteNum objectAtIndex:i] drawInRect:CGRectMake(rectangle.size.width + 50, rectangle.origin.y, 70, 20) withFont:[UIFont systemFontOfSize:12.0]];
	}
	
	NSString *zeroPointStr = @"0";
	[zeroPointStr drawInRect:CGRectMake(kXStartPoint, 366, 52, 20) withFont:[UIFont systemFontOfSize:12.0]];
	NSString *halfPointStr = [NSString stringWithFormat:@"%d", Max / 2];
	[halfPointStr drawInRect:CGRectMake(140, 366, 52, 20) withFont:[UIFont systemFontOfSize:12.0]];
	NSString *rightPointStr = [NSString stringWithFormat:@"%d", Max];
	[rightPointStr drawInRect:CGRectMake(270, 366, 52, 20) withFont:[UIFont systemFontOfSize:12.0]];
	
	[voteNum release];
	[voteItemName release];
	[voteNumberStrArry release];
}

 

效果图:


分享到:
评论

相关推荐

    柱状图V3_Labviewhistogram_labview.柱形图_labview柱状图_labview柱状图

    柱形图_labview柱状图_labview柱状图"是一个关于使用Labview创建柱状图的项目,主要关注的是数据的可视化表示,这对于数据分析和结果展示至关重要。 柱状图是一种常用的数据表示方式,它通过长条的高度来显示各个...

    柱状图V3.0-112,柱状图怎么做,LabView

    在LabVIEW中创建柱状图是一种常见的数据可视化方式,它可以帮助我们直观地理解一组数据的分布情况。柱状图V3.0-112.vi是一个LabVIEW程序,专门用于制作柱状图,适用于进行各种数据分析任务。下面将详细阐述如何在...

    渐变柱状图代码.rar_matlab柱状图_matlab渐变图_柱状图_渐变色_渐变色 matlab

    在MATLAB中,柱状图是一种常用的数据可视化工具,它能直观地展示各类别数据的大小。当柱状图结合渐变色时,可以更好地突出数据的差异和趋势,增加图表的美观性和可读性。本教程将详细介绍如何在MATLAB中创建具有渐变...

    用Delphi实现柱状图_delphi_delphi柱状图_delphi柱行图_delphi图形pudn_

    在本文中,我们将深入探讨如何使用Delphi编程语言来实现柱状图,这对于数据分析和可视化至关重要。Delphi,作为一个强大的Windows应用程序开发工具,提供了一系列组件和API,使得开发者能够轻松创建各种类型的图表,...

    Qt 柱状图绘制

    在给定的“Qt 柱状图绘制”主题中,我们将深入探讨如何在Qt环境中创建和定制柱状图,以及相关的重要概念和技术。 柱状图是一种常用的数据可视化工具,它使用垂直或水平的长条来表示数据的类别和相应的量。在Qt中,...

    Java生成柱状图

    Java生成柱状图是一种在Java应用程序中展示数据的可视化方式,尤其适用于数据分析和报告。柱状图能够清晰地比较不同类别的数据量,是数据可视化的常见选择。在这个项目中,开发者提供了一个可以直接运行的解决方案,...

    echarts-省份地图+柱状图组合.zip

    ECharts 是一个由百度开发的开源 JavaScript 数据可视化库,它提供了丰富的图表类型,如柱状图、折线图、饼图、散点图等,并且支持地图图表,包括省份地图。"echarts-省份地图+柱状图组合.zip" 是一个包含 ECharts ...

    使用three.js绘制3d图表(柱状图,饼状图,环状图,面积图等).zip

    使用three.js绘制3d图表(柱状图,饼状图,环状图,面积图等).zip使用three.js绘制3d图表(柱状图,饼状图,环状图,面积图等).zip使用three.js绘制3d图表(柱状图,饼状图,环状图,面积图等).zip使用three.js...

    柱状图_VB窗体显示柱状图_vb柱状图_柱状图mdb_柱状图_

    在VB(Visual Basic)开发环境中,创建一个窗体显示柱状图是一项常见的任务,尤其在数据分析和可视化领域。本文将详细讲解如何利用VB来实现这一功能,并结合数据库数据进行展示。 首先,我们要明白柱状图是一种图形...

    柱状图转换成饼状图

    在数据分析和可视化领域,柱状图和饼状图是两种常用的数据表示方法。它们各有特点,适用于不同的场景。本文将详细探讨如何将柱状图转换为饼状图,并阐述这两种图表各自的优势和适用情况。 首先,柱状图是一种用于...

    PB自定义柱状图

    在PB中,自定义柱状图是一种常见的数据可视化工具,用于展示分类数据的量级差异。柱状图可以清晰地比较不同类别之间的数量,是数据分析和报表制作中的重要元素。 创建PB自定义柱状图涉及以下几个关键知识点: 1. *...

    安卓横向柱状图demo2

    "安卓横向柱状图demo2"是一个示例项目,旨在展示如何在Android平台上创建和使用横向柱状图,特别是在上一版本的基础上进行了改进,增加了对负数的支持并优化了动画效果。这个demo对于开发者来说是一个很好的学习资源...

    Bootstrap柱状图插件

    在Bootstrap中,柱状图是一种常用的数据可视化元素,它可以帮助用户直观地理解各种数据的对比和分布。Bootstrap柱状图插件通常基于JavaScript库,如jQuery或Chart.js,来增强其功能和交互性。 柱状图是数据可视化的...

    c#绘制3D柱状图

    在C#编程环境中,生成3D柱状图是一项常见的数据可视化任务,这有助于直观地展示多维度数据。本文将深入探讨如何使用C#实现这一功能,以及如何通过修改参数来调整柱状图的显示效果。 首先,C#中用于创建图形界面的...

    颜色渐变的柱状图

    【颜色渐变的柱状图】是一种数据可视化工具,它以柱子的高度或长度来表示数值,同时在颜色上采用渐变效果,以增强视觉吸引力并突出数据的变化趋势。这种图表在信息技术领域广泛用于数据分析、报告展示和业务决策中,...

    R语言ggplot2柱状图(条形图)、簇状、并列、百分比绘图方法总结

    簇状柱状图和并列柱状图是柱状图的两种变体,簇状柱状图将不同组的数据并排展示,以便进行组间对比;并列柱状图则是将不同组别的柱子并列显示,也方便对比不同组别之间的差异。百分比柱状图是一种特殊形式的柱状图,...

    matlab 绘制 阴影 黑白 柱状图 条形图

    在MATLAB中,绘制柱状图或条形图是一种常用的数据可视化方法,尤其适用于比较不同类别之间的数值。本文将详细讲解如何使用MATLAB绘制带有阴影的黑白柱状图,以及如何利用提供的`figure`文件进行进一步理解。 首先,...

    多模式多用途钻孔柱状图制作软件

    钻孔柱状图是地质勘探报告中最基本、数量最多的图件,编制钻孔柱状图是地勘单位的基本工作,也是投入地质技术力量最多的工作之一。 早期的柱状图主要由手工绘制而成,所需工作量极大,且制图效果不够理想、无法保证...

    echarts实现动态柱状图

    ECharts,作为一款由百度开发的开源JavaScript图表库,提供了丰富的图表类型和强大的交互功能,使得动态柱状图的实现变得简单高效。本篇文章将详细探讨如何使用ECharts来创建动态柱状图,满足大屏可视化对实时数据...

    基于Matlab实现多组并列柱状图的填充画法(源码+指导视频).rar

    在本资源中,我们主要探讨如何使用Matlab来实现多组并列柱状图的填充画法。Matlab是一款强大的数学计算和数据可视化软件,它提供了丰富的图形库,能够帮助用户绘制各种复杂的图表,包括柱状图。在这个教程中,我们将...

Global site tag (gtag.js) - Google Analytics