绘制坐标图,折线图
来源:互联网 发布:不会编程能玩树莓派吗 编辑:程序博客网 时间:2024/04/29 21:07
项目中会使用坐标图来展示数据的变换,那么就会使用一些ios中的绘制线条的功能,例如:
//**两点之间画实线
-(void)drawLineFrom:(CGPoint)origion to:(CGPoint)endPoint context:(CGContextRef)context lineColor:(UIColor *)lineColor{
//**画线指定背景 两点 和颜色
CGContextSetLineWidth(context,2.0f);
CGContextSetStrokeColorWithColor(context, lineColor.CGColor);
CGContextMoveToPoint(context, origion.x,origion.y);
CGContextAddLineToPoint(context,endPoint.x,endPoint.y);
CGContextStrokePath(context);
CGContextClosePath(context);
}
//**两点之间画虚线
-(void)drawDashedLineFrom:(CGPoint)origion to:(CGPoint)endPoint context:(CGContextRef)context lineColor:(UIColor *)lineColor{
CGFloat lengths[] = {3,3};
CGFloat lengthsEnd[]= {3,0};
//**画线指定背景 两点 和颜色
CGContextSetLineDash(context, 0, lengths, 2);
CGContextSetLineWidth(context,0.5f);
CGContextSetStrokeColorWithColor(context, lineColor.CGColor);
CGContextMoveToPoint(context, origion.x,origion.y);
CGContextAddLineToPoint(context,endPoint.x,endPoint.y);
CGContextStrokePath(context);
CGContextClosePath(context);
//**关闭曲线
CGContextSetLineDash(context, 0, lengthsEnd, 2);
}
//**绘制Y轴上的文字标记
-(void)drawY_AxisDesc:(NSArray *)array origion:(CGPoint)zero heigh:(CGFloat)heigh context:(CGContextRef)ref{
if(!array||![array count])
return;
int max = [selfmaxNumerFrom:array];
self.maxValue = max;
//**Y轴上距离间隔
float lineDistance = (heigh-X_Y_distance-Y_end_distance)/[arraycount];
//**Y轴描绘的数字间隔
float numberDistance = ((float)max)/[arraycount];
NSDictionary *dic = [NSDictionarydictionaryWithObjectsAndKeys:[self.axisColorcolorWithAlphaComponent:1.0f],NSForegroundColorAttributeName, [UIFontsystemFontOfSize:text_size_big_2],NSFontAttributeName,nil];
NSLog(@"lineDistance::%f,numberDistance:%lf,max::%d",lineDistance,numberDistance,max);
for(int i =0;i<=[arraycount];i++){
NSString *flagS = [NSStringstringWithFormat:@"%0.0f",i*numberDistance];
//**如果numberDistance跨度小于1,则应展示小数部分
if(numberDistance<=1)
flagS = [NSStringstringWithFormat:@"%0.1f",i*numberDistance];
if(i==[array count]){
if(i*numberDistance <max)
flagS = [NSStringstringWithFormat:@"%d",max];
}
//**左移距离
float toLeft;
if(flagS.length>=4)
toLeft =48.0f;
else
toLeft =40.0f;
//**文字绘图位置Y坐标与虚线相比有偏差,所以减去12个像素点,上移。如果最大值为零则除原点外,其他0值不需要绘制。
if(!(!self.maxValue&&i>0))
[flagSdrawAtPoint:CGPointMake(zero.x-toLeft, zero.y-lineDistance*i-12)withAttributes:dic];
//**根据描绘文字的位置画虚线
if(i)
[selfdrawDashedLineFrom:CGPointMake(zero.x, zero.y-lineDistance*i)to:CGPointMake(zero.x+self.totalSize.width-X_end_distance-X_Y_distance, zero.y-lineDistance*i) context:ref lineColor:self.axisColor];
// NSLog(@"lineDistace::%d,zero.y::%f",lineDistance,zero.y);
}
}
//**绘制X轴上的文字标记
-(void)drawX_AxisDesc:(NSArray *)array origion:(CGPoint)zero width:(CGFloat)width context:(CGContextRef)ref{
if(!array||![array count])
return;
NSDictionary *dic = [NSDictionarydictionaryWithObjectsAndKeys:[self.axisColorcolorWithAlphaComponent:1.0f],NSForegroundColorAttributeName, [UIFontsystemFontOfSize:text_size_big_2],NSFontAttributeName,nil];
//**X轴上线段间隔
float lineDistance = (width-X_Y_distance-X_end_distance)/[arraycount];
for(int i =0;i<[arraycount];i++){
NSString *flagS = [array objectAtIndex:i];
[flagSdrawAtPoint:CGPointMake(zero.x+i*lineDistance, zero.y+10)withAttributes:dic];
}
}
//**绘制数据折线图
-(UIImage *)drawBrokenLineAccordingHori:(NSArray *)horiArr Verti:(NSArray *)vertiArr AxisColor:(UIColor *)axColor BrokenColor:(UIColor *)brokColor inBgSize:(CGSize)bgSize{
//**X轴上文字间隔
float X_lineDistance = (self.totalSize.width-X_Y_distance-X_end_distance)/[horiArrcount];
//**Y轴上文字间隔
// NSInteger Y_lineDistance = (self.totalSize.height-X_Y_distance)/[vertiArr count];
//**Y轴上单位数字占据的距离
float unitDistance;
//**检测最大值是否为零
if(self.maxValue)
unitDistance = (self.totalSize.height-X_Y_distance-Y_end_distance)/self.maxValue;
else
unitDistance =0.0f;
//NSLog(@"maxValue::%d",self.maxValue);
NSMutableArray *x_Value_Arr = [NSMutableArrayarrayWithCapacity:0];
NSMutableArray *y_Value_Arr = [NSMutableArrayarrayWithCapacity:0];
for(int i =0;i<[horiArrcount];i++){
//**取出对应Y轴上数字
float Y_Value = [[vertiArr objectAtIndex:i]floatValue];
//**根据数字计算出Y轴上对应的位置(距离原点长度)
float Y_Value_Real_Distance = Y_Value *unitDistance;
//**右移动40像素,使点位于日期中心
NSNumber *xNumber = [[NSNumberalloc]initWithFloat:self.origionPoint.x+X_lineDistance*i+40];
NSNumber *yNumber = [[NSNumberalloc]initWithFloat:self.origionPoint.y-Y_Value_Real_Distance];
[x_Value_ArraddObject:xNumber];
[y_Value_ArraddObject:yNumber];
}
// NSLog(@"%@:::%@",x_Value_Arr,y_Value_Arr);
//**画折线,并绘制对应月度业绩数据
[selfdrawLineWith_X_Arr:x_Value_Arr y_Arr:y_Value_Arr context:self.overallContextlineColor:brokColor descRealValue:vertiArr];
returnUIGraphicsGetImageFromCurrentImageContext();
}
//**多点之间画折线
-(void)drawLineWith_X_Arr:(NSArray *)x_Arr y_Arr:(NSArray *)y_Arr context:(CGContextRef)context lineColor:(UIColor *)lineColor descRealValue:(NSArray*)descArr
{
if([x_Arr count]!=[y_Arrcount]||!x_Arr|!y_Arr||![x_Arr count]||![y_Arr count])
return;
//**画线指定背景 两点 和颜色
CGContextSetLineWidth(context,2.0f);
CGContextSetStrokeColorWithColor(context, lineColor.CGColor);
CGContextMoveToPoint(context, [[x_ArrobjectAtIndex:0]floatValue],[[y_ArrobjectAtIndex:0]floatValue]);
for(int i =1;i<[x_Arrcount];i++){
CGContextAddLineToPoint(context,[[x_ArrobjectAtIndex:i]floatValue],[[y_ArrobjectAtIndex:i]floatValue]);
NSLog(@"x:%f---y:%f",[[x_ArrobjectAtIndex:i]floatValue],[[y_ArrobjectAtIndex:i]floatValue]);
}
// CGContextAddLineToPoint(context,100,12);
CGContextStrokePath(context);
CGContextClosePath(context);
//**在节点处圆点
[selfdrawCircleWith_X_Arr:x_Arr y_Arr:y_Arr context:context lineColor:lineColor];
//**在节点附近绘制业绩数据
[selfdrawAchievementValueWith_X_Arr:x_Arr y_Arr:y_ArrdescRealValue:descArr context:context];
}
//**根据坐标画圆
-(void)drawCircleWith_X_Arr:(NSArray *)x_Arr y_Arr:(NSArray *)y_Arr context:(CGContextRef)context lineColor:(UIColor *)lineColor{
if([x_Arr count]!=[y_Arrcount]||!x_Arr|!y_Arr||![x_Arr count]||![y_Arr count])
return;
for(int i =0;i<[x_Arrcount];i++){
//**外部圆圈为指定颜色
CGContextAddArc(context, [[x_ArrobjectAtIndex:i]floatValue], [[y_ArrobjectAtIndex:i]floatValue],8.0f, 0, 6.3,0);
CGContextSetFillColorWithColor(context, lineColor.CGColor);
CGContextFillPath(context);
//**内部圆圈颜色为白色
CGContextAddArc(context, [[x_ArrobjectAtIndex:i]floatValue], [[y_ArrobjectAtIndex:i]floatValue],6.0f, 0, 6.3,0);
CGContextSetFillColorWithColor(context, [UIColorwhiteColor].CGColor);
CGContextFillPath(context);
}
}
- 绘制坐标图,折线图
- GDI+绘制极坐标图、雷达图
- 绘制坐标图型
- GDI+绘制极坐标图
- MATLAB绘制双坐标图
- R语言绘制双坐标图直方图与折线的结合
- Swift基础之设计折线坐标图
- R语言绘制双坐标图
- php Jpgraph绘制简单的X-Y坐标图
- php Jpgraph绘制复杂的X-Y坐标图
- php Jpgraph绘制复杂的X-Y坐标图
- 九、matplotlib系列---pyplot极坐标图的绘制
- 【python图像处理】python绘制极坐标图
- C#动态坐标图
- jfree chart 坐标图
- iText7画坐标图
- python 三维坐标图
- VC画坐标图 求助!!!
- Storm入门指南第三章 拓扑结构
- NameNode 格式化失败问题的解决
- C++ 使用模版范式写一个单例模式的类--简单实现单例模式
- ubuntu 进入单用户模式修改密码或解冻(激活)root
- 【Python】Python的数据分析(二)——pandas安装及使用
- 绘制坐标图,折线图
- 并行设计
- hello,intel TBB
- cell的自适应 根据cell上面的内容 动态返回cell的高度 还有利用NSMutableAttributedString 做出效果
- Eclipse快捷键 10个最有用的快捷键
- Activity回收时候fragment的异常
- android textview 显示一行,且超出自动截断,显示"..."
- hadoop中使用ACL管理HDFS权限
- 编译GCC-4.3.2的错误及解决方案