法律状态公告日
法律状态信息
法律状态
2015-05-20
专利权的转移 IPC(主分类):G06F17/30 变更前: 变更后: 登记生效日:20150429 申请日:20050729
专利申请权、专利权的转移
2010-05-12
授权
授权
2007-12-19
实质审查的生效
实质审查的生效
2006-04-26
公开
公开
相关申请的参照
本专利申请涉及2004年9月15日提交的,名为“Common Charting UsingShapes(使用形状的公用制图)”的专利申请第10/941,566。该相关申请被转让被本专利申请的受让人,并通过引用结合于此。
背景技术
图表是数字数据的图形表示。图表对于以简明且易于理解的形式呈现复杂数据而言尤其有用。在当今的桌面发行环境中,用户可使用图表创建令人印象深刻的演示。图表基于输入到诸如来自美国华盛顿州雷蒙德市的微软公司的“EXCEL”等应用程序的底层数据。底层数据然后可用于以多种不同的格式创建数据图表,如饼形图、条形图、直方图、折线图等等。另外,图表的每一部分可具有相关联的颜色、纹理和其它效果,以改进图表的外观,这对于传达信息而言是十分重要的。
图表中包括的标签有助于图表的视觉功能和演示。如果用户激活自动化数据标签功能,则具有较多数据点的图表将变得难以阅读。一般而言,先前提供的自动化图表加标签算法导致重叠的文本和未被优化以使用图表区域的标签定位。因此,需要替换的方法。
发明内容
本发明的实施例涉及通过优化图表和图上的标签的放置解决了上述限制的系统和方法。标签的优化是依照基于一组约束对标签的指定定位进行评分的算法来提供的。标签的当前定位越符合规定的约束,该图表的得分就越高。该算法视图通过多次调用一个函数来最小化得分,该函数在每次被调用时重新定位单个标签。在本发明的一个实现中,手动地定位的标签在优化过程中不被考虑。
在本发明的一个方面,依照在图表或图的标签或锚点(anchor)上操作的目标函数或评分函数以及扰动函数来定义优化过程的函数。锚点指的是具有相关联的标签的图表的显示元素,如饼形图的特定的一片、泡式图的一个泡或其它元素,取决于所使用的图表。目标函数指的是定义可用于对图表评分的优化目标的函数。例如,目标函数可以对应于最小化标签的重叠、最小化自锚点的边缘的距离、优化标签位置的其它目标、以及这些目标的可能组合。扰动函数指的是定义图表上标签的调整的限制的函数。例如,扰动函数可定义用于重定位标签的范围限制、可以对于标签所作出的改变类型的有限子集、以及其它限制。
附图说明
图1示出了可在本发明的一个示例性实施例中使用的示例性计算设备。
图2依照本发明示出了在标签位置优化之前和之后具有自动加标签的饼形图的示例性视图。
图3依照本发明示出了在标签位置优化之前和之后具有自动加标签的泡式图的示例性视图。
图4依照本发明示出了在标签位置优化之前和之后具有自动加标签的时间线图的示例性图示。
图5依照本发明示出了用于实现生成图表和优化标签位置的示例性制图系统500。
图6依照本发明示出了用于确定对应于标签的最优布局的可视数据对象布局的示例性伪代码。
具体实施方式
现在将参考附图更完整地描述本发明,附图形成了本发明的一部分,并作为说明示出了用于实施本发明的具体示例性实施例。然而,本发明可以用许多不同的形式来实施,且不应当被解释为限于此处所陈述的实施例;相反,提供这些实施例使得本公开内容能够彻底和完成,并且将向本领域的技术人员完全传达本发明的范围。本发明可被实施为方法或设备等等。因此,本发明可采用完全硬件实施例、完全软件实施例或组合软件和硬件方面的实施例的形式。因此,以下详细描述不应当在限制的意义上考虑。
说明性操作环境
参考图1,用于实现本发明的一个示例性系统包括诸如计算设备100的计算设备。计算设备100可被配置成客户机、服务器、移动设备或任一其它计算设备。在最基本的配置中,计算设备100通常包括至少一个处理单元102和系统存储器104。根据计算设备的确切配置和类型,系统存储器104可以是易失性(如RAM)、非易失性(如ROM、闪存等)或两者的某一组合。系统存储器104通常包括操作系统105、一个或多个应用程序106,并且可包括程序数据107。在一个实施例中,应用程序106包括用于实现本发明的功能的图表标签优化应用程序120。这一基本配置在图1中由虚线108内的组件示出。
计算设备100可具有另外的特征或功能。例如,计算设备100也可包括另外的数据存储设备(可移动和/或不可移动),如磁盘、光盘或磁带。这类另外的存储在图1中由可移动存储109和不可移动存储110示出。计算机存储介质可包括以用于储存如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法和技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器104、可移动存储109和不可移动存储110都是计算机存储介质的示例。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存期望的信息并可由计算设备100访问的任一其它介质。任一这类计算机存储介质可以是设备100的一部分。计算设备100也可具有(多个)输入设备112,如键盘、鼠标、输入笔、语音输入设备、触摸输入设备等等。也可包括(多个)输出设备114,如显示器、扬声器、打印机等等。
计算设备100也包含允许设备如通过网络与其它计算设备118进行通信的通信连接116。通信连接116是通信介质的一个示例。通信介质通常可以由诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据具体化,并包括任一信息传送介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质。本发明使用的术语计算机可读介质包括存储介质和通信介质。
用于优化自动标签放置的说明性实施例
如此处所使用的,术语“图表”和“可视数据对象”互换地使用,来描述各种可视对象,如饼形图、泡式图、折线图、时间线、线图、条形图、照片、数字图像以及可具有相关联标签的其它对象。
本发明的实施例涉及使用一种算法来优化图表上标签的位置。本发明使用一些函数从一组可能的布局中搜索标签的最优布局。为将布局问题构成搜索,本发明定义了一初始布局和两个函数:基于评估标准评定布局质量的目标函数,以及操纵给定布局以产生搜索空间内的新布局的扰动函数。评分和扰动函数都由布局上的一组约束来定义。给定这两个函数,可执行搜索来确定最优布局。在一个实施例中,使用了一种模拟退火方法,作为用于确定最优布局的随机化搜索算法。
约束可被划分成两组:硬约束和软约束。硬约束由任一可接受布局所要求的特征构成,并且因此硬约束界定了可能布局的空间。相反,软约束由最终布局所期望但并不要求的特征构成。硬约束通常通过扰动函数来施加,该扰动函数被设计成仅生成满足硬约束的布局。评分函数核查给定布局满足软约束的程度。
使用该算法,可使用一组数据来填充具有标签的图表,同时优化图表区域中标签的位置。
图2依照本发明示出了在标签位置优化之前和之后具有自动加标签的饼形图的示例性视图。
视图210示出了饼形图上的标签由于饼形图中包括的数据点的数目而重叠。重叠的文本使得难以从视觉上辨别所有的标签以及它们与饼形图元素的关联。
视图220通过运行本发明的优化算法得到了具有改进加标签的饼形图。该饼形图的可读性通过优化图表空间内的标签的位置而得到很大的改进。该算法将某些标签从它们所相关的锚点(片)移开,而其它标签被移至离其锚点更近,或甚至在锚点内居中或部分居中。其它标签添加了引导线以将标签视觉上与其相关联的锚点链接。视图220示出该算法使用提供图表标签的最优布局的各种方法。
图3依照本发明示出了在标签位置优化之前和之后具有自动加标签的泡式图的示例性视图。
视图310示出可以定位泡式图上的标签使得确定其相关锚点可能是不可能的。此外,由于与泡边缘重叠的文本,标签的文本可能不是图表内的泡的最优视图的位置。
视图320是通过运行本发明的最优算法具有改进加标签的泡式图。该泡式图的可读性通过优化图表空间内的标签位置而得到很大的改进。该算法将某些标签从它们所相关的锚点(泡)移开,而其它标签被移至离其锚点更近,甚至在锚点内居中或部分居中。其它标签添加了引导线,以将标签在视觉上与其相关联的锚点链接,同时将标签移至离其相关联的锚点有一距离。视图320示出了该算法使用了类似于对饼形图所采用的各种方法所提供泡式图标签的最优布局的各种方法。
图4依照本发明示出了在标签位置优化之前和之后具有自动加标签的时间线图的示例性视图。
视图410示出时间线图上的标签由于包括在所提供的空间内的数据点的数目而重叠。此外,没有得益于本发明的自动化加标签算法不够智能来将文本空间与时间线上的数据点区分开来。
视图420是通过运行本发明的优化算法具有改进的加标签的时间线图。该时间线的可读性通过优化图表空间内标签的位置而得到很大的改进。该算法改变了文本格式,并遍及图表空间移动了标签以优化图表空间的使用。视图420示出该算法使用了类似于对上文提供的饼形图和泡式图示例所采用的各种方法的提供时间线图标签的最优布局的各种方法。
依照本发明,也可提供除图2-4中示出的实施例之外的实施例。例如,本发明可用于优化线图上、照片内或结合其它可视数据对象的标签的位置。
图5依照本发明示出了用于实现生成图表和优化标签位置的示例性制图系统500。包括在系统500中的是提供对文档504的访问的应用程序502以及用于在计算机监视器屏幕508上呈现文档504的图形模块506。
如此处所使用的,文档504是包括诸如文本和图形等用户可读信息的计算机可读文件。文档504可以由用户通过应用程序502的用户界面来查看和编辑。文档的示例性类型可包括但不限于,电子表格、演示或常规的文本文档。由此,取决于文档的类型,应用程序502可以是,例如,但不限于,微软的“WORD”、“POWERPOINT”、“EXCEL”或其它应用程序。作为示例,如屏幕508上所示,文档504是“演示”,它通常(但不总是)与“POWERPOINT”相关联。
尤其与本描述相关的是演示中的图表5i0。图5的特定实现中所示的图表510是列图表。依照其它实施例,图表510不限于列图表,而可以是任何其它类型的图表,诸如但不限于,饼形图、折线图、散布图、照片或其它可视数据对象。图表510中的各种数据最初由文档504指定。文档504用称为图表对象512的图表定义来指定图表510。
图表对象512按照图表元素定义了图表510。一般而言,图表元素是表示图表的一方面的数据单元。通常,图表元素表示图表中与图表所传达的信息或图表类型有关的一方面。示例性图表元素包括条(例如,对于条形图)、图表轴、图表图例、图表标题、图表标签、元素颜色、文本字体、元素位置、数据源等等。图表元素可以被称为与标签有关的锚点。图表对象512的一个实现是一组可扩展标记语言(XML)。为了说明,下文示出了图表对象512的示例XML:
-<c:Chart xmlns:c="chart"xmlns:s="shape">
-<c:Scaling>
<c:ScaleID>0</c:ScaleID>
<c:Orientation>MinMax</c:Orientation>
</c:Scaling>
-<c:Scaling>
<c:ScaleID>1</c:ScaleID>
<c:Orientation>MinMax</c:Orientation>
</c:Scaling>
<c:Name>Chart1</c:Name>
-<c:PlotArea>
<c:Shape/>
-<c:Graph>
<c:Type>Column</c:Type>
<c:SubType>Clustered</c:SubType>
<c:Overlap>0</c:Overlap>
<c:ScaleID>0</c:ScaleID>
<c:ScaleID>1</c:ScaleID>
-<c:Series>
<c:Index>0</c:Index>
<c:Name>Series1</c:Name>
-<c:Shape>
-<s:Fill>
-<s:Pattern>
<s:Title>Wide upward diagonal</s:Title>
<s:Color>black</s:Color>
<s:Color2>white</s:Color2>
</s:Pattern>
</s:Fill>
-<s:Border>
<s:Weight>0</s:Weight>
<s:Solid>black</s:Solid>
</s:Border>
</c:Shape>
-<c:DataLabels>
-<c:Shape>
-<s:Font>
<s:FontName>Arial</s:FontName>
<s:Size>18</s:Size>
<s:AutoScale/>
</s:Font>
</c:Shape>
-<c:Number>
<c:FormatString>0.0</c:FormatString>
</c:Number>
<c:ShowValue/>
</c:DataLabels>
-<c:Category>
<c:DataSource>0</c:DataSource>
<c:Data>Sheet1!$A$1:$A$3</c:Data>
</c:Category> -<c:Value>
<c:DataSource>0</c:DataSource>
<c:Data>Sheet1!$B$1:$B$3</c:Data>
</c:Value>
</c:Series>
<c:PlotVisible/>
</c:Graph> -<c:Axis>
<c:Placement>Bottom</c:Placement>
<c:AxisID>0</c:AxisID>
<c:ScaleID>0</c:ScaleID>
<c:CrossingAxis>1</c:CrossingAxis>
-<c:Shape>
-<s:Font>
<s:FontName>Arial</s:FontName>
<s:Size>18</s:Size>
<s:AutoScale/>
</s:Font>
</c:Shape>
-<c:Number>
<c:SourceLinked/>
<c:BuiltInFormat>0</c:BuiltInFormat>
</c:Number>
<c:MajorTick>None</c:MajorTick>
<c:TickMarkSkip>1</c:TickMarkSkip>
<c:Type>Automatic</c:Type>
</c:Axis>
-<c:Axis>
<c:Placement>Left</c:Placement>
<c:AxisID>1</c:AxisID>
<c:ScaleID>1</c:ScaleID>
<c:CrossingAxis>0</c:CrossingAxis>
<c:CrossesAt>Minimum</c:CrossesAt>
<c:CrossBetween>Between</c:CrossBetween>
-<c:Shape>
-<s:Font>
<s:FontName>Arial</s:FontName>
<s:Size>18</s:Size>
<s:AutoScale/>
</s:Font>
</c:Shape>
-<c:Number>
<c:SourceLinked />
<c:BuiltInFormat>0</c:BuiltInFormat>
</c:Number>
<c:MajorTick>Cross</c:MajorTick>
<c:MinorTick>Cross</c:MinorTick>
<c:Type>Value</c:Type>
<c:MajorUnit>5</c:MajorUnit>
</c:Axis> </c:PlotArea></c:Chart>
文档504通常也具有其它文档数据514,包括但不限于文本和格式化信息。依照一个实现,当启动应用程序502且打开文档504时,将图表对象512传递到图形模块506的图形接口516用于呈现。
图形接口516确定图表对象512表示什么类型的图形。可由图形接口516处理的图形的类型包括但不限于,图示、图表或任意形状。图表对象512包括指示它定义图表的标识符。基于图表标识符,图形接口516确定图表对象512定义了图表,并将其发送到制图模块518。
制图模块518包括转换引擎520,它将图表对象512转换成图形模块506用于将图表510呈现到屏幕508的形式。具体地,转换引擎520将图表对象512转换成基于形状的图表定义522。如其名字所暗示的,基于形状的图表定义522按照图形而非图表元素来定义图表。使用形状能够通过允许与图形交互的机制改进了图表呈现过程、图表外观以及图表操纵。
在转换过程中,转换引擎520执行若干操作。例如,转换引擎520从图表对象512中引用的数据源检索构成图表510的数据(例如,数字数据)。数据源可以是文档504本身,或某一其它来源,诸如但不限于,另一文档、数据库、文件、因特网或队列。除数据之外,转换引擎520可检索描述如何格式化数据的数字格式化信息。数字格式化信息包括但不限于,货币符号、小数位数、百分比或分数格式、或日期和时间格式。
转换引擎520也将图表元素转换成形状,如线、矩形、圆形、三角形等等。形状是简单地表示图表元素的可视外观的数据单元,且不依靠或依赖于底层数字图表数据。由此,例如,图表对象512中的条将被转换成基于形状的图表定义522中的矩形;图表轴将被转换成线,等等。
另外,转换引擎520将选中的相关图形组合,以便于由用户操纵相关图形。图形接口516提供了允许用户与相关形状组交互的功能。转换引擎520通过组合诸如但不限于相关数据标签和相关数据序列等相关图表元素利用了那些功能。在检索数据、将图表元素转换成形状、并组合相关形状之后,转换引擎520生成基于图形的图表定义522。
基于形状的图表定义522的一个实现由XML代码组成。为了说明,下文示出了一个示例性基于形状的图表定义522的XML代码:
-<group>
<id>Chart</id>
-<shapes>
-<rect>
<id>ChartArea</id>
<style>margin-left:0;margin-top:9.75pt;width:501pt;height:319.5pt;z-index:1</style>
-<border>
<Solid>black</Solid>
<Weight>0</Weight>
</border>
</rect>
-<group>
<id>Series1</id>
<style>margin-left:88.5pt;margin-top:60pt;width:359.25pt;height:220.5pt;z-index:3</style>
<coordorigin>438,743</coordorigin>
<coordsize>479,294</coordsize>
-<Fill>
-<Pattern>
<Title>Wide upward diagonal</Title>
<Color>black</Color>
<Color2>white</Color2>
</Pattern>
</Fill>
-<border>
<Solid>black</Solid>
<Weight>0</Weight>
</border>
-<shapes>
-<rect>
<id>Point1</id>
<style>left:438;top:839;width:80;height:198</style>
</rect>
-<rect>
<id>Point2</id>
<style>left:638;top:743;width:80;height:294</style>
</rect>
-<rect>
<id>Point3</id>
<style>left:837;top:931;width:80;height:106</style>
</rect>
</shapes>
</group>
-<group>
<id>Y Axis</id>
-<border>
<Solid>black</Solid>
<Weight>0</Weight>
</border>
-<shapes>
-<line>
<id>Y Axis Line</id>
<style>z-index:4</style>
<from>45pt,32.25pt</from>
<to>45pt,280.5pt</to>
</line>
-<line>
<id>Y Axis Tick Mark1</id>
<style>z-index:5</style>
<from>40pt,281pt</from>
<to>48pt,281pt</to>
</line>
-<line>
<id>Y Axis Tick Mark2</id>
<style>z-index:6</style>
<from>40pt,256pt</from>
<to>48pt,256pt</to>
</line>
-<line>
<id>Y Axis Tick Mark3</id>
<style>z-index:7</style>
<from>40pt,231pt</from>
<to>48pt,231pt</to>
</line>
-<line>
<id>Y Axis Tick Mark4</id>
<style>z-index:8</style>
<from>40pt,207pt</from>
<to>48pt,207pt</to>
</line>
-<line>
<id>Y Axis Tick Mark5</id>
<style>z-index:9</style>
<from>40pt,182pt</from>
<to>48pt,182pt</to>
</line>
-<line>
<id>Y Axis Tick Mark6</id>
<style>z-index:10</style>
<from>40pt,157pt</from>
<to>48pt,157pt</to>
</line>
-<line>
<id>Y Axis Tick Mark7</id>
<style>z-index:11</style>
<from>40pt,132pt</from>
<to>48pt,132pt</to>
</line>
-<line>
<id>Y Axis Tick Mark8</id>
<style>z-index:12</style>
<from>40pt,108pt</from>
<to>48pt,108pt</to>
</line>
-<line>
<id>Y Axis Tick Mark9</id>
<style>z-index:13</style>
<from>40pt,83pt</from>
<to>48pt,83pt</to>
</line>
-<line>
<id>Y Axis Tick Mark 10</id>
<style>z-index:14</style>
<from>40pt,57pt</from>
<to>48pt,57pt</to>
</line>
-<line>
<id>Y Axis Tick Mark 11</id>
<style>z-index:15</style>
<from>40pt,33pt</from>
<to>48pt,33pt</to>
</line>
-<line>
<id>Y Axis Tick Mark 12</id>
<style>z-index:16</style>
<from>38.25pt,281pt</from>
<to>49.5pt,281pt</to>
</line>
-<line>
<id>Y Axis Tick Mark 13</id>
<style>z-index:17</style>
<from>38.25pt,157pt</from>
<to>49.5pt,157pt</to>
</line>
-<line>
<id>Y Axis Tick Mark 14</id>
<style>z-index:18</style>
<from>38.25pt,33pt</from>
<to>49.5pt,33pt</to>
</line>
</shapes>
</group>
-<line>
<id>X Axis</id>
<style>z-index:19</style>
<from>44.25pt,281pt</from>
<to>492.75pt,281pt</to>
-<border>
<Solid>black</Solid>
<Weight>0</Weight>
</border>
</line>
-<group>
<id>Series 1 DataLabels</id>
<style>margin-left;106.5pt;margin-top:33pt;width:324pt;height:164.25pt;z-index:106:20</style>
<coordorigin>462,707></coordorigin>
<coordsize>432,219</coordsize>
-<Font>
<FontName>Arial</FontName>
<Size>18</Size>
<AutoScale/>
</Font>
-<shapes>
-<rect>
<id>Series 1 DataLabel 1</id>
<style>left:462;top:803;width:33;height:31;wrap-style:none;text-anchor:top</style>
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">6.0</div>
</textbox>
</rect>
-<rect>
<id>Series 1 DataLabel 2</id>
<style>left:661;top:707;width:33;height:31;wrap-style:none;text-anchor:top</style>
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">8.9</div>
</textbox>
</rect>
-<rect>
<id>Series1 DataLabel 3</id>
<style>left:861;top:895;width:33;height:31;wrap-style:none;text-anchor:top</style>
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">3.2</div>
</textbox>
</rect>
</shapes>
</group>
-<group>
<id>Y Axis Labels</id>
<style>margin-left:10.5pt;margin-top:22.5pt;width:19.5pt;height:271.5pt;z-index:21</style>
<coordorigin>334,693</coordorigin>
<coordsize>26,362</coordsize>
-<Font>
<FontName>Arial</FontName>
<Size>18</Size>
<AutoScale/>
</Font>
-<shapes>
-<rect>
<id>Y Axis Labels 0</id>
<style>left:347;top:1024;width:13;height:31;wrap-style:none;text-anchor:top</style>
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">0</div>
</textbox>
</rect>
-<rect>
<id>Y Axis Labels 5</id>
<style>left:347;top:858;width:13;height:31;wrap-style:none;text-anchor:top</style>
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">5</div>
</textbox>
</rect>
-<rect>
<id>Y Axis Labels 10</id>
<style>left:334;top:693;width:26;height:31;wrap-style:none;text-anchor:top</style>
stroked="f">
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">10</div>
</textbox>
</rect>
</shapes>
</group>
-<group>
<id>X Axis Labels</id>
<style>margin-left:112.5pt;margin-top:296.25pt;width:312pt;height:23.25pt;z-index:22</style>
<coordorigin>470,1058</coordorigin>
<coordsize>416,31</coordsize>
-<shapes>
-<rect>
<id>X Axis Labels Category 1</id>
<style>left:470;top:1058;width:15;height:31;wrap-style:none;text-anchor:top</style>
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">A</div>
</textbox>
</rect>
-<rect>
<id>X Axis Labels Category 2</id>
<style>left:670;top:1058;width:16;height:31;wrap-style:none;text-anchor:top</style>
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">B</div>
</textbox>
</rect>
-<rect>
<id>X Axis Labels Category 3</id>
<style>left:869;top:1058;width:17;height:31;wrap-style:none;text-anchor:top</style>
-<textbox style="fit-shape-to-text:t"inset="0,0,0,0">
<div style="text-align:left">C</div>
</textbox>
</rect>
</shapes>
</group>
</shapes>
</group>
图形接口516接收基于形状的图表定义522,并在屏幕上508呈现图表510作为由基于形状的图表定义指定的一组形状。图形接口516通常通过调用操作系统或显示控制器功能来执行呈现。例如,在WINDOWS操作系统中,图形接口516可调用图形显示接口(GID+)。
如图所示,图形模块506包括一组图形服务524。图形服务524包括可由应用程序访问来操纵图表510的服务。图形服务524提供了访问该服务的一个或多个应用编程接口(API)。
由于图形模块506呈现了多种形状,因此图形服务524能够提供用于操纵图表510的高级函数。图形服务524能够例如,在图表内的形状上执行矢量图形函数。为了说明,矩形可通过调用图形服务524移动形状的单个函数来移动,而非通过调用多个低级函数在新位置中重新绘制该矩形来移动。另外,图形模块506对于多个应用程序是公用的,使得形状操纵/编辑和外观在应用程序之间是一致的。由此,图形模块506可呈现用于编辑图表510中的形状的图形用户界面,而不管应用程序502的类型是什么。
标签优化526是系统500内针对本发明的代码。标签优化526接收基于形状的图表定义522,并依照优化算法来优化标签的位置。如先前所提到的,基于形状的图表定义522允许标签能够被容易地移动,因为它们是按照其形状而非要求重新绘制标签的其它低级函数来定义的。标签优化526可以在屏幕508上呈现了图表510之前或之后使用,来优化标签的定位。例如,依照优化算法的标签定位可以对于所呈现的每一图表是自动的。相反,标签优化可以依照用户选择来提供,其中,用户肯定地选择优化标签。在一个实现中,由用户手动定位的标签在优化过程中被忽略。
术语模块在一般意义上使用,以描述可用于执行一个或多个期望功能的组件。模块可以用各种方法和形式来实现。例如,模块可以用硬件、软件、固件或硬件、软件和/或固件的各种组合来实现,取决于诸如速度、成本、大小等因素。例如,但非限制,在一个实现中,系统100中的每一模块包括储存在计算机可读介质上并在诸如上文参考图1所描述的计算系统等计算系统上执行的软件,如动态链接库(DLL)。
图6依照本发明示出了用于确定对应于标签的最优布局的可视数据对象的布局的示例性伪代码。
实现示例性算法600要求指定不同的函数。InitializeLayout()函数定义了每一可视元素的初始放置,并由此提供了搜索的起始点。PertubLayout()函数对应于先前描述的扰动函数,并提供了将给定布局改为新布局的方法。RevertLayout()函数倒转了PerturbLayout()的动作,以从新布局返回到前一布局。Random()函数返回0.0和1.0之间的数字。最后,对应于先前描述的目标函数的ScoreLayout()函数计算当前布局如何接近最优。在一个实施例中,终止条件可以根据用于实现有用布局的时间限制、布局对于最优的接近程度以及其它因素来变化。在另一实施例中,得分被定义为正,且得分越低,布局越好。因此,目标是根据所使用的约束来最小化得分。对于要使用的布局可接受的得分依赖于算法的终止条件。
如在伪代码中所示的,该算法接受搜索空间内所有的好的移动,并且用温度T的指数函数的概率也接受某些差的移动。当算法前进时,T被退火(或减少),导致接受差移动的概率的降低。以此方式接受差移动允许算法避开评分函数中的局部最小值。
为提供标签的最优布局而定义的约束可包括诸如最小化自锚点的距离、最小化标签的重叠、最小化与元素的重叠、字体限制、方向限制以及影响如何操纵标签的其它限制等约束。可以将任意数量的约束注入到算法中,用于操纵标签来优化其在可查看空间中的位置。
以上说明书、示例和数据提供了本发明的组成部分的制造和使用的完整描述。由于可以在不脱离本发明的精神和范围的情况下作出本发明的许多实施例,本发明驻留在所附权利要求书中。
机译: 用于在图表上制作自动放置的元素和用户放置的元素的布局的方法,系统和计算机可读存储介质
机译: 在图表上自动放置标签的系统和方法
机译: 在图表上自动放置标签的系统和方法