锯齿状图表绘制

数据可视化实战——如何用Python绘制高效统计图表 本文详细介绍了如何使用Python进行高效的数据可视化,涵盖从基础图表(如条形图、折线图、散点图)到高级技巧(如复合图表、动态可视化)的实战方法。通过具体代码示例和常见问题解决方案,帮助读者掌握数据可视化的核心技能,提升数据分析与呈现的效率。 阅读详情
锯齿状图表绘制
  • 锯齿状图形绘制

CAShapeLayer :图形绘制层,CALAyer的子类,初始化时只需用CALayer的类方法layer。


CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类。你指定诸如颜色和线宽等属性,用CGPath来定义想要绘制的图形,最后CAShapeLayer就自动渲染出来了。当然,你也可以用Core Graphics直接向原始的CALyer的内容中绘制一个路径,相比直下,使用CAShapeLayer有以下一些优点:

  • 渲染快速。CAShapeLayer使用了硬件加速,绘制同一图形会比用Core Graphics快很多。
  • 高效使用内存。一个CAShapeLayer不需要像普通CALayer一样创建一个寄宿图形,所以无论有多大,都不会占用太多的内存。
  • 不会被图层边界剪裁掉。一个CAShapeLayer可以在边界之外绘制。你的图层路径不会像在使用Core Graphics的普通CALayer一样被剪裁掉。
  • 不会出现像素化。当你给CAShapeLayer做3D变换时,它不像一个有寄宿图的普通图层一样变得像素化。

需要配置绘制线的颜色(strokeColor)、宽度(lineWidth)和填充颜色(fillColor)根据自己需求配置

CAShapeLayer需要知道自己沿着什么路径进行绘制,所以我们要给其设置路径path,path是CGPathRef类型。

使用UIBezierPath贝塞尔曲线绘制路径可以直接生成圆、矩形、椭圆等等,也可以根据自己需求进行划线形成路线。

由于CAShapeLayer的path属性是CGPathRef,所以我们赋值时是:layer.path = Path.CGPath;


建立如图锯齿图表步骤:

  1. 新建一个视图PDARCProgressView继承自UIView
  2. 重写- (void)drawRect:(CGRect)rect 方法进行绘图
  3. 当绘制图形时要考虑很多种情况例如:

当数据源为空的时候即没有任何数据时:

if (self.categoryArray.count == 0) {
UIBezierPath *Path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width / 2.f, self.frame.size.height / 2.f) radius:66 startAngle:- M_PI endAngle: + M_PI clockwise:YES];
CAShapeLayer *layer = [CAShapeLayer layer];
layer.path = Path.CGPath;
layer.fillColor = ColorWithHex(@"#cccccc").CGColor;
layer.strokeColor = kMainBorderColor.CGColor;
layer.lineWidth = 2;
[self.layer addSublayer:layer];
}

当数据源所有数据得分都是0时:

CGFloat beforeWith = 0; CGFloat startAngle = - M_PI; for (int i = 0; i < self.categoryArray.count; i ++) { NSNumber *radius = @(0); while (radius.floatValue == beforeWith) { radius = [withArr objectAtIndex:arc4random()%3]; } beforeWith = radius.floatValue; UIBezierPath *Path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width / 2.f, self.frame.size.height / 2.f) radius:beforeWith startAngle:startAngle endAngle:startAngle + PDAngle((1.0 / self.categoryArray.count)) clockwise:YES]; CAShapeLayer *layer = [CAShapeLayer layer]; layer.path = Path.CGPath; layer.fillColor = ((UIColor *)colors[i % 10]).CGColor; layer.strokeColor = kMainBorderColor.CGColor; layer.lineWidth = 2; [self.layer addSublayer:layer];

当数据源数量为1时:

UIBezierPath *Path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width / 2.f, self.frame.size.height / 2.f) radius:66 startAngle:- M_PI endAngle: + M_PI clockwise:YES]; CAShapeLayer *layer = [CAShapeLayer layer]; layer.path = Path.CGPath; layer.fillColor = ((UIColor *)colors[0]).CGColor; layer.strokeColor = kMainBorderColor.CGColor; layer.lineWidth = 2; [self.layer addSublayer:layer];

然后是正常状态时:

CGFloat beforeWith = 0; CGFloat startAngle = - M_PI + M_PI_4; CGFloat firstWith = -1; for (int i = 0; i < self.categoryArray.count; i ++) { DBMainSchoolModel *model = self.categoryArray[i]; NSNumber *radius = [withArr objectAtIndex:arc4random()%3]; if (i > 9) { radius = withArr[2]; } else { while (radius.floatValue == beforeWith) { radius = [withArr objectAtIndex:arc4random()%3]; } if (i == 0) { firstWith = beforeWith; } } beforeWith = radius.floatValue; UIBezierPath *Path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width / 2.f, self.frame.size.height / 2.f) radius:beforeWith startAngle:startAngle endAngle:startAngle + PDAngle(([model.course floatValue] / self.totla)) clockwise:YES]; startAngle += PDAngle(([model.course floatValue] / self.totla)); [Path addLineToPoint:CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.height / 2.0)]; [Path closePath]; if (startAngle > M_PI) { startAngle -= 2 * M_PI; } CAShapeLayer *layer = [CAShapeLayer layer]; layer.path = Path.CGPath; if (i > 9) { layer.fillColor = ColorWithHex(@"#cccccc").CGColor; } else { layer.fillColor = ((UIColor *)colors[i % 10]).CGColor; } layer.strokeColor = kMainBorderColor.CGColor; layer.lineWidth = 2; [self.layer addSublayer:layer]; }

源码地址: 图表绘制
【进阶指南】MATLAB平滑曲线绘制:从散点到专业图表 本文详细介绍了MATLAB中绘制平滑曲线的进阶技巧,从散点数据到专业图表的完整流程。通过spcrv函数实现参数化样条插值,讲解坐标轴标签、图例设置、多曲线颜色搭配等专业配置方案,并提供学术图表排版优化和常见问题排查方法,帮助用户快速掌握MATLAB描点绘图的核心技术。 阅读详情

相关推荐

2、Origin双Y轴图表:从数据导入到学术级图表精修

本文详细介绍了使用Origin软件创建双Y轴图表的全流程,从数据导入到学术级图表精修。通过实际案例解析双Y轴在科研数据处理中的核心价值,分享工程创建、坐标轴调整、字体规范等实用技巧,帮助研究者快速制作符合期刊要求的专业图表。特别针对Origin双Y轴功能在材料科学、化学实验等领域的应用进行深入讲解。

weixin_30329623的博客 353

三角函数逼近锯齿函数和阶梯函数

这其实是国外经典微积分教材《托马斯大学微积分》的两道课后习题,通过这两道习题你就会发现三角函数为什么能在电路、信号等理工科学科中有如此重要的应用了。     三角函数逼近锯齿函数,Matlab代码如下所示:t=-pi:0.02:pi; y1=(t+pi).*(t>=-pi&t-pi/2&t0&tpi/2&t<=pi); y2=0.7854-0.63662*cos(2*t)-0.07074*cos

一亩房 7343

Excel任意函数曲线图绘制实战教程

要使用EVALUATE()函数,必须绕过常规公式输入方式,转而通过名称管理器(Name Manager)定义一个指向该函数的命名公式。这是由于EVALUATE()属于宏表函数,在现代Excel界面中无法直接在单元格内调用。其基本语法结构如下:=EVALUATE(引用包含表达式的单元格)例如,假设A2单元格存放的是字符串"2*3^2+5",我们希望将其计算结果输出到B2。此时需执行以下步骤:打开【公式】→【名称管理器】→【新建】;名称输入CalcResult;

weixin_42577735的博客 1040

Echarts + layer 图表放大实现方案

需求描述:每个页面有多个echarts图表,应要求每个图表右上角增加一个按钮,点击后弹出一个窗口,窗口展示当前图表。 我们项目组四个开发人员,出现了三种实现方案,此处依次做简述(因公司保密要求,此处不展示任何代码与效果图)。 原页面(父页面)Echarts实现方式: 1、数据加载方式:ajax。 2、一个页面多个图表,一个页面一个js文件,一个页面一个css文件...

iQian²的博客 2751

Web Echarts+layui 统计图表demo实例 (统计深圳市旅游景点信息)

使用Echarts+layui+html 开发数据统计图表,demo中统计的数据是深圳市旅游景点分析统计,内有深圳地图统计,饼图统计,柱状图统计,漏斗图统计,玫瑰饼图统计等图形展示

openlayer添加折线图表并自定义地图层

openlayer添加highchart折线图表, 地图展示折线图 html展示地图,openlayer显示不同图层,自定义gis地图

layui做折线图_Layer+Echarts构建弹出层折线图的方法

layer是一款口碑极佳的web弹层组件,她具备全方位的解决方案,致力于服务各个水平段的开发人员,您的页面会轻松地拥有丰富而友好的操作体验。在中国可视化生态系统中,ECharts 通过提供方便丰富的可视化图表,极大缩短了用户与数据的距离。个人认为是最好用的可用来生成图表的插件。现在使用Layer和Echarts构建弹出层折线图。下载好所需要用到的工具包,Echarts下载为echarts.min....

weixin_39632379的博客 822

超详细!思岚S2激光雷达hector_mapping建图

使用思岚S2激光雷达,在ros平台上利用hector_mapping功能包实现建图功能

m0_50965539的博客 5591

Echarts + layer 图表放大 代码示例

在Echarts + layer 图表放大实现方案一文中,简述了图表放大实现的思路。今天贴上方案三的相关代码。 首先看效果图: 放大效果图: 文件结构如下图: echarts.html代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org...

iQian²的博客 2658

Fiddler抓包实战:5分钟搞定微信公众号历史消息接口分析(附完整Python代码)

本文详细介绍了如何使用Fiddler抓包工具逆向分析微信公众号历史消息接口,并提供完整的Python代码实现。从环境准备、动态参数捕获到商业级采集系统架构设计,全面解析了突破官方接口限制的技术方案,帮助开发者高效获取公众号文章数据。

tree8的博客 329

Python+QMT量化交易实战:从零搭建你的第一个极速策略(附完整代码)

本文提供了一份详细的Python+QMT量化交易实战指南,手把手教你从零搭建一个可回测、可实盘的极速策略。内容涵盖环境配置、QMT核心机制解析、双均线策略的完整代码实现、回测优化方法以及实盘部署要点,帮助量化交易新手快速入门并掌握核心开发流程。

b9c0d的博客 1014

负指数信号梯形成型方法浅析

负指数信号/核脉冲信号梯形成型算法浅析前言常见的负指数信号处理方法简介最佳滤波器梯形成型滤波器高斯成型滤波器关于梯形成型函数卷积法的讨论(正文)函数卷积法的背景函数卷积法的推导过程 前言 负指数信号是含电容电路中极易产生的一种信号形状。对于常见的核脉冲信号,由于探测器所产生的探测到的信号一般为带电粒子定向移动所产生的电流信号,为将该电流信号向电压信号进行转换,需要在前放中加入电容(理想型电流灵敏型前放除外,但实际上即使是电流灵敏型前放也必定存在一些寄生电容)。由于电容的放电规律在时域中为负指数变化,所以需要

pricegod的小窝 5322

免费搞定DWG转DXF:ODA File Converter保姆级配置指南(附常见报错解决)

本文详细介绍了如何使用ODA File Converter免费工具实现DWG到DXF的格式转换,包括环境配置、命令行参数解析、编程集成方案及常见问题解决。特别针对网络访问异常、参数配置等实际痛点提供应对策略,帮助用户高效完成工程设计文件的格式转换。

weixin_29291185的博客 6039

矩形图表绘制

矩形图表绘制矩形图表绘制矩形图表绘制是根据每一项数量斜体增长矩形图表功能。在上篇日志中我讲到过使用CAShapeLayer配合UIBezierPath贝塞尔曲线绘制锯齿状图表。这篇中主要是说矩形图表绘制,涉及技术和上篇差不多,重复的具体就不说了。主要说一下CATextLayer,继承于CALayer。它以图层的形式包含了UILabel几乎所有的绘制特性,并且额外提供了一些新的特性。 同样,CATe

_understand的博客 1790

实战派指南:反激电源EMI滤波器设计,从理论计算到PCB布局避坑

本文详细解析了反激式开关电源EMI滤波器设计的全流程,从理论计算到PCB布局避坑,结合34W PD快充电源案例,系统介绍了共模与差模干扰的识别、关键元件选型、参数计算优化及PCB布局技巧,帮助工程师有效解决传导测试超标等常见问题。

weixin_29230805的博客 373

储能BMS三级架构解析:从模组到堆的管理与控制

本文深入解析了储能电池管理系统(BMS)的核心三级架构,即电池模组管理层(BMU)、电池簇管理层(BCMU)和电池堆管理层(BAMS)。文章详细阐述了各级的职能分工与协同机制,从底层数据采集、均衡管理,到中层信息汇总与安全控制,再到顶层的系统总控与对外通信,揭示了该架构如何实现大规模储能电池的精细化、安全与高效管理。

ik678901234的博客 472

Origin作图出现锯齿状以及出现大C字母问题解决方案

Oringin9.2 64位 1.解决锯齿状问题 问题重现: 解决蓝色锯齿状问题步骤: polt Details------- connect----- B-Spline-----OK 2.解决图片出现大C问题 Tools---options Graph----user Defined Symbols Ctrl

BD的笔记 6万+

基于BP神经网络PID控制的电机转速控制器设计复现

摘要:本文提出了一种基于BP神经网络PID控制的永磁同步电机转速控制方法,通过MATLAB/Simulink平台实现了算法复现。系统采用三层BP神经网络在线调整PID参数,包含输入层(误差、误差变化率、误差积分)、5节点隐含层和输出层(Kp、Ki、Kd)。仿真结果表明,相比传统PID控制,该方案具有更快的响应速度(上升时间减少约40%)、更小的超调量(降低约60%)和更强的抗干扰能力,在电动汽车电机驱动等复杂工况下表现优异。文中详细给出了PMSM数学模型建立、BP网络设计、权值更新算法及Simulink仿真

max500600的博客 308

Kandy统计图表教程:箱线图、直方图与密度图的绘制方法

Kandy是一个功能强大的Kotlin绘图库,专门为数据可视化设计。这个开源项目让开发者能够轻松创建各种统计图表,包括箱线图、直方图和密度图等专业可视化效果。无论你是数据分析师还是开发者,Kandy都能帮助你快速生成高质量的统计图表,让数据洞察变得更加直观易懂。😊 ## 📊 为什么选择Kandy进行数据可视化? Kandy提供了简洁直观的API,让你能够用几行Kotlin代码就创建出精美的

gitblog_01122的博客 652

AI 实战篇 |基于 AI开放平台实现 人脸识别对比 功能,超详细教程【附带源码】

本篇文章来学习一下怎样使用 Unity实现简单地人脸识别 功能。 关于人脸识别,我们可以选择很多平台的SDK接入Unity来实现人脸识别的功能。

努力前行,总会成为自己心中的那道光 5万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据可视化-图表

前文提要:看完上一篇文章的小伙伴,相信都已经清楚图表的基本视觉构造及其相对于的设计要点。这是图表设计系列的第二篇文章,这篇主要讲述选择图表和常见的图表类型这两个部分。全文共7600字左右,阅读时长20分钟~ 懒人目录: 一、图表的选用 1. 确定核心内容 2. 判断比较关系 3. 选择图表类型 二、常见的可视化图表 1. 折线图 2. 面积图 3. 堆叠面积图 ...

AndyT的博客 6875

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Full GC:锯齿状内存波动的深度排查

Full GC:锯齿状内存波动的深度排查

weixin_46619605的博客 1886

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Qt画五角星,简单图表

【代码】Qt画五角星,简单图表。

qq_62687476的博客 645

Java:实现JFreeChart抗锯齿设置(附带源码)

实现JFreeChart的抗锯齿功能,还能够掌握如何通过渲染设置来优化Java图表的显示效果。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1164

B端可视化: 图表设计(2)

本篇文章主要讲述选择图表和常见的图表类型这两个部分。1. 图表的选用我们做数据分析的有句话叫“一图胜千言”,图表是展现数据的一种重要展现形式,选对了图表就能帮助我们更加快速、直观的传达数据...

liudada8265的博客 1998

Excalidraw直线与曲线绘制模式切换技巧

在Excalidraw中灵活切换直线与曲线,能显著提升架构图的可读性与专业性。直线适合表达核心逻辑路径,曲线则用于规避视觉混乱,呈现异步或旁路调用。掌握快捷键、曲率控制和团队样式规范,可高效构建清晰的手绘风格图表。

weixin_36019375的博客 734
下一篇: 矩形图表绘制
_Understand
博客等级 码龄10年 10粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值