发明内容
为克服相关技术中存在的问题,本公开提供一种图表处理方法和系统,以提高图表类应用的开发效率。
根据本公开实施例的第一方面,提供一种图表处理方法,所述方法包括:通过数据子系统和绘图子系统进行图表处理,其中,
通过所述数据子系统接收待处理的图表的初始数据;
根据所述数据子系统中包含的与所述图表对应的数据处理方法,对所述初始数据进行数据转换,得到用于在所述图表中显示的点线的显示数据;
通过所述绘图子系统中包含的点线绘制方法,将所述数据子系统得到的显示数据转换为对应的所述图表中的点线。
根据本公开实施例的第二方面,提供一种图表处理系统,包括:数据子系统和绘图子系统;
所述数据子系统,用于接收待处理的图表的初始数据;并根据与所述图表对应的数据处理方法,对所述初始数据进行数据转换,得到用于在所述图表中显示的点线的显示数据;
所述绘图子系统,用于通过点线绘制方法将所述数据子系统得到的显示数据转换为对应的所述图表中的点线。
本公开的实施例提供的技术方案可以包括以下有益效果:通过将数据子系统和绘图子系统分开,由数据子数据用于对图表的数据进行处理,而由绘图子系统根据处理后的数据绘制图表,使得图表类应用的开发结构更加清晰易用,而且结构相似的多种类型的图表都可以按照这种数据和绘图分开的结构进行开发,提高了图表类应用的开发效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
本申请实施例提供了一种图表处理方法和系统,开发人员可以基于该方法和系统的原理开发移动设备上的图表类应用,将可以减少工作量,提高应用的开发效率。图1示例了一个图表(仅是简单示意,实际的图表可以更加复杂,包含更多的内容),由图1可以看到,构成图表的元素,可以包括各种类型的数据,比如,图1中的9:30,2061等,还可以包括各种坐标点(如点11)、背景线(如纵线12)、连接线13等。
如果要将图1所示例的图表绘制出来,那么可以通过本实施例的图表处理系统执行本申请的图表处理方法得到。并且,可以将图1示例的图表元素分为两种类型,一种是图表中显示的数据,比如,各个时间点对应的股价;另一种是图表中显示的点线,比如,将各个时间点的股价连接成用于表示股价变化趋势的曲线。对应这两种类型的元素,本申请实施例的图表处理系统可以包括:用于处理图表数据的数据子系统、以及用于处理图表绘制组件的绘图子系统,该图表绘制组件例如可以是图表中的点线。
参见图2的示例,如图2所示,在数据子系统中,可以接收待处理的图表的初始数据,以股票类图表为例,该初始数据可以包括定期更新的股价,比如,9:30股价9.26;9:40股价9.27等,在本例子中,待绘制的股票图表可以称为待处理的图表,将根据该初始数据将股票图表(如,K线图)绘制出来,初始数据并不局限于上述的举例,还可以包括其他可以显示在图表中的数据。此外,初始数据可以是服务端发送的,比如,可以从股票服务器获取股票图表所需要的初始数据。
在一个例子中,数据子系统可以定义与平台无关的数据结构,来描述上述初始数据,以使得数据可以方便的跨平台移植。其中,以图表是K线图为例,该数据结构可以是系统预先定义,可以完整的描述整张k线图,使用者可以为数据结构赋值,用于后续绘图子系统根据赋值绘制完整的k线图。数据子系统在接收到初始数据后,可以采用上述的数据结构存储该数据。
示例性的,所定义的数据结构,根据初始数据的类型,可以包括基础元素,如rect、point、color等,可以用于描述显示颜色数据、点的数据等,以及由基础元素复合而成的复合元素,如label(由rect、text、fontsize等复合而成),该复合元素可以用于描述通常在图表中集中显示在同一个矩形框区域的一组数据。通过采用与平台无关的数据结构,可以使得数据方便的跨平台移植。
对于初始数据,还要经过处理,才能转换为绘制图表所需要的数据。比如,要绘制图1所示例的图表,需要计算背景线的位置坐标、连接线中的各个点的坐标等,而且图表中的数据有些是根据初始数据进行统计运算得到的数值,并不是原始的初始数据。因此,数据子系统还可以对初始数据进行数据转换得到在图表中显示的点线的数据,比如,可以通过数据子系统中的数据转换模块包含的与图表对应的一些数据处理方法处理数据,该数据处理方法例如可以是一些数据处理函数或点线计算方法。
而在绘图子系统中,可以包括预设的点线绘制方法,该绘制方法可以用于描述图表中的一些基础组件如何绘制,比如背景线的绘制、连接线的绘制,还包括一些基础控件的绘制,比如label。绘图子系统中的画图模块,可以根据在数据子系统中的数据转换模块计算得到的数据,利用预设绘制方法进行图表的绘制,比如,数据子系统中计算得到背景线的坐标,绘图子系统的画图模块就可以根据这些坐标数据,用背景线的绘制方法绘制图表中的背景线。
图3示例了本申请实施例的图表处理方法的流程图,包括:
301、通过数据子系统接收待处理的图表的初始数据。
302、根据数据子系统中包含的与所述图表对应的数据处理方法,对所述初始数据进行数据转换,得到用于在所述图表中显示的点线的显示数据。
303、通过绘图子系统中包含的点线绘制方法,将所述数据子系统得到的显示数据转换为对应的所述图表中的点线。
例如,在步骤301中,数据子系统可以接收待处理图表的初始数据,比如可以是待绘制的股票类图表的一些股价数据。如上面提到的,本步骤的初始数据可以通过数据子系统中预定义的与平台无关的数据结构存储,以可以方便的进行跨平台的数据移植。
在步骤302中,由数据子系统对初始数据进行数据转换,可以使用与图表类型对应的数据处理函数,不同类型的图表,要显示的数据不同,对初始数据的处理或运算方式可能不同;还可以使用预设的点线计算方法,比如背景线坐标的计算方法,图表中的浮动标线的坐标计算方法等,根据上述的函数或计算方法对初始数据进行处理,将初始数据转换成点线的显示数据。
以股票软件中的分时线的绘制为例,在数据转换时可以包括如下处理:
遍历要在图表中显示的坐标点的数据,找出数据中的最大值和最小值,再根据空间余留规则得到显示区域的最高点和最低点,即highest和lowest两个值。接着,根据坐标点的数量和显示区域frame的宽度,算出每两个点之间的间距。遍历每个坐标点,算出比lowest大的百分比,以frame的高度height为100%的高度,算出这个点对应的纵坐标y值,得到每个点point的显示位置的坐标是(间距*i,y)。经过上述的数据转换处理,将初始数据转换为了用于在图表中显示的坐标点的显示数据,该显示数据表示了坐标点的位置。在经过数据转换后,就可以通过画图模块按照该位置的数据画出每个点,并将各个点连接成线。
在步骤303中,可以通过绘图子系统中预设的绘制方法,根据所述显示数据绘制点线得到图表。本步骤可以在不同的图层进行绘制,图表中可以包括至少一个图层,在每个图层,可以根据预设的用于控制图表元素的绘制方法,在图表中绘制与所述显示数据对应的点线。
比如,以股票图表的绘制为例,图表元素的绘制方法可以包括:结合oc的基本函数,如CGRectMake,NSString,UIImage等和Core Graphics,绘制一些基础控件,如label,image等,还包括对图表中的背景线、k线柱、浮动控件等的绘制方法。
利用上述的绘制方法,并结合在步骤302中计算出的显示数据,就可以绘制图表。比如,可以使用core graphics绘制图表。
由上述的图表处理方法可以看到,本实施例实际上将图表绘制时使用到的数据子系统和绘制子系统分开,通过数据子系统来处理图表中使用到的各种数据,包括接收存储服务端发送的初始数据,以及对初始数据进行的数据转换处理;通过绘图子系统来根据数据子系统的数据进行图表绘制。
这种分离式的架构,可以使用与平台无关的数据结构描述数据,可以为数据的跨平台移植提供方便,只需要绘图子系统可以根据系统不同(ios或Andriod)加以适应性调整。而对于图表软件的开发者来说,数据和绘制分离的架构,使得开发体系更加清晰易用,并且,可以将数据转换、绘制方法等写成可以继承的基类,比如,以股票软件为例,数据转换的基类,可以包含股票画分时图或K线图的通用的数据处理函数;图表元素计算方法的基类,可以包含背景线的坐标计算、浮动标线的坐标计算等。股票软件包含的多种类型的股票类图表,具有较多的共性,比如,都包含X轴和Y轴,都具有横坐标和纵坐标,都包含背景线等,这些图表都可以使用上述提到的图表处理方法进行开发绘制,都可以继承上述的基类,从而相对单个图表分别开发,能够提高开发速度,提高图表的绘制效率。本申请实施例的方法尤其可以适用于股票K线图的绘制设计,可以显著的提高K线绘制系统的开发效率,K线图元素多并且复杂,通过上述的方法可以简化K线图绘制系统的结构,开发体系更加清晰易用。
在又一个例子中,还可以申请内存池,由内存池中分配内存存储图表绘制所使用的显示数据。这种内容池的分配方式,可以使得内存分配效率得到提升,还可以减少内存碎片的产生。比如,仍以股票类图表为例,由于股票价格会实时变化,图表也需要经常频繁的随之更新,如果使用普通的oc函数申请和释放内存,会产生很多的内存碎片,导致程序运行时间长了会变慢,而使用内存池的方式,可以减少内存碎片的产生,保证程序长时间顺畅运行。
示例性的,如下举例通过本申请的内存池分配内存的方式:可以预先定义在图表绘制的过程中可以分配的内存大小,如,2+4,4+4,8+4,16+4,32+4,64+4等,其中,以“32+4”为例,32可以表示内存大小是32byte,4可以表示分配的内存大小在存储时所占的字节。假设在图表绘制中由于某种需要分配一个18byte的内存,18位于16-32的区间,因此可以取32作为返回内存的大小。
那么可以由系统一次性分配2048大小的内存,该2048就相当于一个内存池。本申请的图表处理系统可以将内存池分成2048/32=64份,并将本次划分的每份内存大小(32)存入前4个字节。然后返回第一份内存给请求18byte内存的请求者,即需要18byte大小却返回32byte大小,能够完全满足使用者要求,剩下的63份内存用链表存储起来。在后续再请求内存时,如果请求的内存大小仍然在16-32区间,则可以从剩下63份里面再拿出一份分配给使用者。内存释放的时候读取前4个字节(存储着本次划分的大小32),将这一块放入32的链表里即可。
结合图2所示,本实施例的图表处理系统中,可以包括:数据子系统和绘图子系统。其中,数据子系统,用于接收待处理的图表的初始数据;并根据与所述图表对应的数据处理方法,对所述初始数据进行数据转换,得到用于在所述图表中显示的点线的显示数据。绘图子系统,用于通过点线绘制方法将所述数据子系统得到的显示数据转换为对应的所述图表中的点线。例如,在数据子系统中,可以通过数据转换模块对接收到的服务端发送的初始数据,进行数据转换,得到用于在图表中显示的点线的显示数据;在绘图子系统中,可以通过画图模块根据预设的绘制方法,根据所述显示数据绘制点线得到图表。
进一步的,数据子系统,在接收待处理的图表的初始数据时,用于采用预定义的与平台无关的数据结构,存储接收到的待处理的图表的初始数据。
进一步的,数据子系统,用于使用与图表类型对应的数据处理函数,或者根据预设的点线计算方法,对所述初始数据进行处理,将初始数据转换成点线的显示数据。
进一步的,绘图子系统,用于在预设图层,根据与图表类型对应的点线绘制方法,在图表中绘制与所述显示数据对应的点线。
参见图4所示,本实施例的图表处理系统,在数据子系统41和绘图子系统42之外,还可以包括:内存管理模块43,用于由内存池中分配内存,存储所述显示数据。
本公开提供的图表处理系统,通过将数据和绘图分开,可以在数据中定义数据处理和各种坐标数据的计算方法的基类,可以统一定义各种基础的绘图组件的绘制方法,根据这种架构开发图表类应用时,多种图表都可以根据该系统进行开发,清晰易用,可以提高图表类应用的开发效率。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。