Programming MS Office 2000 Web Components第三章第一节

译者说明: 欢迎访问我的 Blog: http://blog.csdn.net/daidaoke2001/

译文中的错误或不当之处望不吝指出, 这也是我坚持翻译工作的最大动力。

译文中标注了多个问号的地方,是我也不明白的地方,如果你知道如何翻译,请告诉我,

让我们一起提高。

我的 Email : [email protected]

如需转载,请事先通知。

** 第三章 ** ** 图 ** ** ** ** 表 ** ** ** ** 组 ** ** ** ** 件 ** ** **

至此我们已经熟悉了电子表格组件,现在让我们来研究图表组件的功能和编程模型。和前一章中一样,在介绍了一个特定功能后,我会讲述该功能的一些有趣用途。本书第二部分中,您会看到大部分功能在实际中的运用。

在本章中也会演示一些使用您自己的代码来为图表组件添加功能的巧妙方法。刚开始的时候您可能会觉得图表组件要比电子表格和透视组件复杂一些,但它具有一些可供您在解决方案中使用的强大功能。此外,它还提供了许多“配置选项”,您可以通过调节这些选项来根据您自己的爱好定制图表。

** 第一节 ** ** 图 ** ** ** ** 表 ** ** ** ** 组 ** ** ** ** 件 ** ** ** ** 基 ** ** ** ** 础 ** ** **

图表组件是一个 COM 控件,它就是由开发 Microsoft Excel2000 中的图表生成功能的小组开发的。它以位于界面的 COM 控件形式,以及位于内存中的 GIF 生成引擎形式来提供基本的商业图表生成功能。在现在这个第一个版本中,图表控件支持所有能在 Excel 中找到的二维图表类型(等高线图类型除外),另外还支持 极坐标图,堆积饼图,以及填充散布图表类型。当前这个版本不包括任何三维图表类型或效果。

本章中将会讨论的一个新特性是图表控件能够在一个组件的整个图表空间中显示多个图表。图表控件实际上是由一个包含一个或多个图表的完整图表空间组成的,这些图表都共享同一组相同的类别。(我会在本节后部详细解释术语“类别”)通常,在一个时刻,你只会在控件中包含一个图表;然而,在同一个图表空间中包含多个图表,使得可以很容易的快速比较相似信息。在本章结尾处我会详细讲述“图表空间”。

和电子表格组件一样,图表组件具有许多基本特性和一些独特的术语。在我们讨论更高级的主题之前,您应该熟悉这些特性和术语。

** 图表生成的术语 **

在开发 Excel2000 图表生成功能的一个新特性时, OWC 小组组织了大量的可用性测试,来检查是否我们的设计易于使用。如果您从来没有听说过这种测试,我可以解释一下,测试是这样的,我们从整个西雅图地区的公司和家庭中找来一些真正的顾客,向他们展示一个新特性的原型。我们要求这些人执行各种各样的任务,观察他们,以了解他们如何解决问题,以及是否我们的设计能够有效的帮助他们完成任务。我们常常发现现实情况与我们的期望相去甚远――这意味着必须回头重新设计这个特性。

在一个测试中,我们向测试人员展示我们在 Excel 中创建的各种图表,并将图表中的某部分圈起来。我们要求他们告诉我们他们认为这些被圈起来的部分应该叫什么。从逻辑上说,您会期望我们找到一些共性,发现那个大多数人已经将它和某一特定元素关联起来的名称。然后我们就可以在我们的文档,编程模型,用户界面等地方使用这个名称。但是结果使我们十分沮丧,我们发现完全不能给这些图表元素提供一个标准名称。您可能认为人们应该知道哪个是 x 轴,哪个是 y 轴,但是许多人并不会记得多少数学课上学到的东西,而常常将它们搞混。

** 注释 **

如果您正努力回忆哪个轴是 X 轴,哪个轴是 Y 轴,让我告诉您, X 轴是水平方向的, Y 轴是垂直方向的。当然,大多数图表都有被称为类别轴和数值轴的轴,而它们的方向是依赖于特定图表类型的。散布图和气泡图具有 X 和 Y 轴,因此这些图表上的各点之间要比较两个 ( 或三个 ) 值。在雷达图或极坐标图这样的图表类型中,轴实际上是从图表的中心延伸出去,因此 X 和 Y 轴就没有意义了。

因为看来并不存在描述一个图表的元素的通用语言,所以讨论创建和操作图表就十分困难。为了获得任何对于图表组件的特性和编程模型的理解,我们都必须首先定义一系列用于组件的关键术语,并确定它们代表什么元素。许多术语在不同的图表类型中具有特殊的含义,因此,如果你在下面讨论中遇到一个您不熟悉的图表类型,可参考“支持的图表类型”一节,查看该图表类型相对应的屏幕截图和介绍。

** 系列 **

系列是图表组件中最重要的结构之一。实际上,这个组件中的大部分内部结构都是围绕着系列的,图 3-1 中标记出了一个柱状图中的系列。请注意每个系列与图表的图例中的一项相对应。

图 3-1 。一个包含两个系列的柱形图。

一个系列代表了希望以某种方式显示的多个数据点的一个序列。人们通常认为是图表具有一个独特的类型(例如线形图,条形图,或者饼图)。但是在图表控件中,具有独特类型的是系列――这意味着您可以通过设置一个系列为线形,而另一个系列为柱型来创建一个组合图表。一个系列中的所有数据点通常具有相同的颜色(但您可以改变这个颜色,我们后面会提到)。另外,例如趋势线和错误条这样的元素是和特定的系列相关的。

缺省情况下,图例上的一项代表一个系列,但是如果需要,您可以隐藏图例中的某项。(后面将解释具体怎样做)

** 类别 **

类别要比系列难解释一些。图 3-2 标记出了一个柱形图中包含的类别标签。

图 3-2 。柱形图中的类别。

所有图表都有类别的概念,但并不是所有图表都有类别轴。在图 3-2 中,销售代表的名字是类别,每个系列包含各个类别上的一个单一数据点。大多数图表中,类别和系列的交叉点创建一个数据点。不过要注意的是,有些特别的系列和其它系列不同,它可能并不包含包含某个类别的数据点。例如,图表控件从所有系列中合并所有的类别,但在系列-类别的交集处不绘制数据点(???)。

类别轴在三个重要的方面不同于数值轴。

u 各类别没有内在的顺序。

u 没有最小和最大的类别。

u 一个数据点仅分配给一个特定的类别。

如果销售人员是您的类别轴,特定的销售数量就很自然与特定的销售人员相对应,在销售人员之间不存在数据点。而一个值轴有一个确定的最小值和最大值,在轴上的空间被平均分割为多个单元,当从最小值移向最大值时单元对应的值逐渐增加。因此不管位于轴的何处,每个数据点都能被标记。

散布图和气泡图没有类别轴,因为它的数据点是由 X 坐标和 Y 坐标定义的,气泡图表的数据点还具有一个代表气泡尺寸的值。虽然这些图表类型没有类型轴,数据点仍然可以属于某个特定的类别,并且你也可以获得一个给定数据点的类别名。将额外的信息编码到散布图或气泡图中的数据点的机制是很有用的,它允许您在用户将鼠标停留在一个数据点上时显示这个信息。

** 注释 **

显然,在真实的世界中,销售额可能常常属于多个销售代表。但大部分销售信息系统都将每个销售代表对销售的贡献分配合存储在一个数值中,这个数值会被标注在图表中。数据在类别中整齐分布的目的是使得可以使用连续的数值来比较离散的类别。例如,数值 1.4567454 可以在一个范围在 0 到 2 之间的数值轴中被标注,但是这个数值并不与类别在轴上的离散分布的容器相对应???

** 数值,数值,数值 **

在大多数较简单的图表类型中,您只需要考虑一组数值。表 3-3 显示了以销售人员和年来标注的销售量。这个图表中每个数据点只包含一个数值――对于大部分简单图表类型来说都是这样的。

图 3-3 。柱形图中的数值。

另一方面,散布图和气泡图表,则要求每个数据点必须包括两个或三个数值。在一个散布图表中,每个数据点有一个 X 值和 Y 值,这两个值的组合定义了一个二维空间,也就是笛卡儿空间中的点( X,Y )。气泡图表增加了第三个数值:一个决定了气泡以( X,Y )为中心的半径的气泡尺寸值。可以选择使用气泡的尺寸值代替半径来代表气泡的面积。

当使用盘高-盘低-收盘图时,情况会更复杂一些,因为在这个图中又是三个值确定一个数据点,不过它们现在被称为盘高值,盘低值,和收盘值。一个开盘-盘高-盘低-收盘 (OHLC) 图表中每个数据点关联 4 个数值,当然,额外的那个数值被称为开盘值。(这些类型的图表常常被称为股票图表,因为它们通常主要是被用来显示股票数据。)

当处理一个极坐标图时,您需要提供另一组数值: R 值和 Theta 值。 R 值定义了数据点距图表中心的距离, Theta 值代表了与通过原点的水平线之间的角度。

** 轴 **

您可能非常熟悉“轴”这个术语。在图表组件中,轴的含义和它在几何学上的含义基本上是相同的。不过,图表控件给轴添加了另一层含义,即将轴指定为类别轴或数值轴。在表 3 - 4 中,标明了类别轴和数值轴。

表 3 - 4 。 柱形图中的类别和数值轴。

一个类别轴被分割成多个相等的段――每个代表一个单独的类别。而数据点被标注在每个类别的中间。对于类别轴来说,不存在最小值和最大值的概念。而另一方面,数值轴因为是一个连续的轴,所以它具有最小值和最大值。在数值轴上,数据点在最小值和最大值之间被标注在它们应该位于的地方。

因为类别轴和数值轴的位置依赖于不同的图表类型,所以“类别”和“数值”只是逻辑的名称,而不能简单的直接映射为 X 轴和 Y 轴。例如,柱形图中的类别轴是沿底部 (X) 水平伸展的,而数值轴 (Y) 则是位于左方垂直上升的。但是在条形图中,位置正好相反,类别轴位于左边,而数值轴位于底部。可以参考“支持的图表类型”以了解各类型图表的更多信息。

** 缩放比例 **

虽然您一定听说过术语“轴”,但您可能以前并没有听说过术语“缩放比例”。虽然您通常只在数值轴上使用缩放比例,但是其实每个轴都具有缩放比例,缩放比例定义了它对应的轴的度量刻度,决定了轴的最小和最大值。缩放比例也决定了轴上的间隔是线性的,还是对数的。线性尺度将轴分割成从最小值线性增加到最大值的平均的各段(例如, 20 , 40 , 60 , 80 , 100 )。对数尺度也将轴分割成平均的各段;但从一个段到下一个段是以对数,而不是线性来递增的(例如, 1 , 10 , 100 )。

当本章后面部分讨论分割轴时,以及第 6 章中,我们会更加详细的讨论轴的缩放比例,在第 6 章中,我们还会看到如何通过“放大”来更加详细的显示您的数据中的一部分。

** 趋势线 **

图表组件支持在您的图表中为每个系列创建一个趋势线。和在 Excel 中一样,一个趋势线常被用来显示各系列中数据的趋势。如果历史中的各值一直保持递增或递减,那么如果您需要预测将来会出现哪个值,就可以使用趋势线来进行趋势分析和预测。和在 Excel 中一样,图表控件提供几种不同的趋势计算方法,包括线性,对数,多项式,指数,以及权。然而,图表组件不提供 Excel 中的移动平均数趋势线类型。图 3 - 5 显示了一个趋势图的例子。

** 误差线 **

图 3 - 6 显示了一个误差线,误差线是从数据点延伸出去的短线段,它指出了您的数据的某种不确定性,也就是误差值。每个数据点可以显示一个误差线,它表明数据点的真实值可能是误差范围中的任何一点。

和趋势线一样,误差线是和系列相关的。系列中的每个数据点都会显示一个误差线,而这个系列的误差线的集合可以用来显示一个正的误差总量,一个负的误差总量,或者同时显示这两个。误差总量可以以百分比的形式(例如 +10%, -10%, 或 +/-10% ),相对值的形式 ( 例如 +2, -2, 或 +/-2) ,或者自定义误差的形式 ( 例如 , 对于数据点 10 来说,上届是 12 ,下届是 8) 来表示。误差线也可以进行数据绑定,如果进行了数据绑定,则图表控件将各结果列中的值看作是每个数据点的自定义误差值。虽然 Excel 图表也为误差总量提供了标准误差和标准偏差选项,但图表控件本身并不支持这些功能。当然,您可以自己计算这些数值,并在图表中使用自定义的误差总量来显示它们。

为什么要定义一个单独的缩放比例对象?

您可能疑惑于为什么缩放比例的概念不只是轴的一部分。毕竟,似乎是缩放比例决定了一个轴的最小和最大值。但是,缩放比例的最小和最大值决定了被称为绘图区的可视区域的尺寸。轴显示标记和标签,但是是缩放比例为绘图区的尺度确定了准确的点 / 值比例。通过将缩放比例从轴上分离出去,图表控件就能够支持没有可视轴的图表类型。

** 数据标签 **

数据标签是位于数据点附近的一小段文字,您可以通过设置它来显示数据点的值、在系列中所占的百分比、类型名、系列名、或气泡的尺寸。(参见图 3 - 7 的例子)您可以在一个数据标签中显示这些信息片断的任意组合。此外,你还可以控制字体,颜色,边框格式等属性――甚至可以设置在每个信息片断之间使用哪种间隔字符。

图 3 - 7 。 柱形图中的数据标签。

显然,当需要在您的数据点附近显示数字,尤其是需要比较那些可能值非常接近的数据点时,数据标签是十分有用的。在需要显示一个数据点在整个系列中所占的百分比时(例如在饼图中),使用数据标签显示百分比当然也是很有用的。在没有类别轴的图表(例如散布图和气泡图)中使用数据标签显示数据点的类别名也是一个很好的显示额外的类别信息的方法。

和趋势线和误差线一样,数据标签是和系列相关联的。您不能对一个单独的数据点进行格式化,隐藏或显示的操作。所有针对数据标签的操作都会影响系列中的所有数据点。

** 支持的图表类型 **

当我在介绍图表组件时,通常我从一个开发者的口中听到的第一个问题就是:“它支持那些图表类型?”图表类型是图表生成功能的基础,因此多多益善。在我的书架上有一本包含各种图表类型,图表元素和信息图形学技巧的参考书,它几乎有 450 页!(这本书是:《信息图形:全面图解指南 [ 操作图形, 1997] 》,和其它任何 Edward Tufte 的书一样,对任何从事信息图形学的人来说,它都是一个极好的资源。)

图形组件的第一个版本包括 Excel2000 中所有二维图表类型的集合(不包括等高线类型),另外,还包括极坐标图,堆积饼图,以及填充散布图类型。在这个版本的图表控件中不包含任何三维图表类型或效果,也不支持 Excel 提供的奇特的填充效果。

让我们看一些图表组件支持的图表类型的例子,并讨论可以使用它们来显示哪种数据。

** 柱形图和条形图 **

柱形图和条形图是在商业中最常用的图表类型,图表为每个数据点显示一个从数值轴上的零点延伸到数据点的被填充的条。

大多数人并不在意柱形图和条形图之间的区别――毕竟,它们基本上是相同的,只是伸展的方法不同。图形组件使用术语“柱”来描述沿屏幕的上下方向扩展的垂直列,使用术语“条”来描述横跨屏幕延伸的水平条。表 3 - 8 显示了一个柱形图和一个条形图的例子。

图 3 - 8 。 柱形图(上面)和条形图。

这些图表类型常用于显示那些包含不需要以某种特定次序显示的类别的数据。与线图不同,柱形图和条形图并不描述次序或级别的概念。

和许多图表类型一样,柱形图和条形图有一些图表子类型。缺省的子类型,叫做簇状柱形图或簇状条形图,在每个类别中不同系列的标记条紧挨在一起。(图 3 - 8 显示了一个簇状柱形图和一个簇状条形图。)当不同的系列之间完全无关或它们不应在界面上被合并时,簇状子系统是最有用的子系统。例如,如果您在一个系列中标记预算值,而在另一个系列中标注实际值,那么您不会需要合并这两种数值。而是会需要将这两种柱形或条形并排放在一起,以便于比较。

堆积柱形图和堆积条形图以一个堆叠一个的形式显示各系列。在这种图表中,柱或条的长度代表了类别对应的所有数据点的总和。表 3 - 9 显示了一个堆积柱形图的例子。

图 3 - 9 。 一个堆积柱形图。

在显示那些可以,并应该被合并起来,以便在视觉效果上描述每个类别总和的数据时,堆积柱形图和堆积条形图是很有用的。例如,如果您以国家和产品来标记销售量信息,您应该需要使用堆积柱形图来显示每个国家(类别)所有产品的总销售量,条仍然根据每个产品的销售量的准确值来进行分段――即高销售量的产品会拥有较长的段,而销售情况不好的产品会拥有较短的段。当不必考虑相对关系,而需要考虑每个类别的总和时堆积图表十分有用。

最后,百分比堆积图表子类型有点象饼图:贯穿绘画区画一个条,或柱,然后将条,或柱根据每个系列的数据点所代表的百分比分割为多个段。这种子图表类型和堆积子图表类型的关键区别在于:各段的长度是数据点占类别中各数据点总和的百分比,而不是数据点的具体值。因为所有条的长度都相同( 100 %),因此这样的图表不能用来比较不同类别的总和。不过,这种类型的图表在查看饼图显示的相同类型的信息时很有用,但与饼图不同的是,它能同时查看来自多个类别和系列的信息。

这里描述的大部分其它图表类型都具有同样的子类型集合――簇状,堆积,和百分比堆积。在后面的介绍中,我不再重复定义这三种子类型,不过需要的时候,我会作简单的说明。请回头参考本节,以了解这些子类型的介绍,以及哪种类型的数据适合于使用这些子类型显示。

** 饼图,堆积饼图,和圆环图 **

饼图在商业图表中也很常见,它们只能显示最低密度的有用信息,并且也是最低效的,这几乎是一个极大的缺点。但是,它们的简洁也使它们非常易于理解,极具说服力。例如,当显示市场占有率的分类信息时,极大或极小的一块所带来的视觉效果确实是强有力的。图 3 - 10 显示了一个典型的饼图。

图 3 - 10 。一个饼图。

饼图最重要的独特之处,是图例显示类别值,而不是系列值。大

Published At
Categories with Web编程
Tagged with
comments powered by Disqus