这个章节详细地介绍 ChartArea 对象,并且对如何在 ChartArea 对象中访问,修改和创建
属性外观提供了信息.
下表定义了包含在 ChartArea 对象中的主要对象.
属性 | 描述 |
Alignment | 获得或设定轴显示时文字的对齐方式,从 ChartArea 中继承 |
Compass | 允许你设定轴的位置.例如,你也许希望在数据上面显示X轴而不是显示在下面 |
C1.Win.C1Chart.Style.Font | 设定轴上显示值所用的字体 |
ForeColor | 设定显示轴,刻度标记和值的前景色 |
OnTop | 取得或设定是否轴和格线在图表图的上面显示. |
Reversed | 取得或设定轴是通常的或者反转的(升序或者降序). |
Text | 设定一个字符串显示在轴的旁边 (这是描述变量和描述轴代表的单位的典型的用法). |
Rotation | 设定Text字符串的方向 |
轴
ChartArea 对象的X,Y和Y2属性返回 Axis 对象,这样你可以定制图表轴的外观.ChartArea 属性的二级属性代表了轴:ChartArea.AxisX, ChartArea.AxisY, 和
ChartArea.AxisY2.这些属性中的每一个都返回一个 Axis 对象,Axis 对象有下面一些主要的属性:
属性 | 描述 |
Alignment | 获得或设定轴显示时文字的对齐方式,从 ChartArea 中继承 |
Compass | 允许你设定轴的位置.例如,你也许希望在数据上面显示 |
C1.Win.C1Chart.Style.Font | 设定轴上显示值所用的字体 |
ForeColor | 设定显示轴,刻度标记和值的前景色 |
OnTop | 取得或设定是否轴和格线在图表图的上面显示. |
Reversed | 取得或设定轴是通常的或者反转的(升序或者降序). |
Text | 设定一个字符串显示在轴的旁边 (这是描述变量和描述轴代表的单位的典型的用法). |
Rotation | 设定Text字符串的旋转 |
轴的位置
轴的注释一般来说显示在轴的旁边.这对图表的起点不在轴的最小值或者最大值的图表会有一些问题.图表可以自动决定在不同的情况下根据图表的类型在哪里放置注释.Compass 属性也可以定义一个轴注释的位置.X轴的 Compass 值可以设定为 North 或者 South,Y轴可以设定为 East 或者 West.默认情况下,X轴设定为 South 并且Y轴设定为 West.
轴的外观
Alignment 对齐方式
Alignment 属性有三种设定:Center, Near, 或者 Far。 设定对齐方式为中央,轴的题目在相对于 ChartArea 的中央位置。设定对齐方式为 Near,就会放置轴的题目在 ChartArea 的左边位置。设定对齐方式为 Far,就会放置轴的题目到 ChartArea 的右边。
Font 字体
字体的大小和类型都可以通过操作轴的 Font 对象来改变。要在设计时访问 Font 属性,需要
点击 Font 节点旁边的省略号或者在 Visual Studio 属性窗口展开轴对象的 Font 节点。想要通过编程改变轴的 Font 属性,输入下面的代码。
- Visual Basic
Dim f As Font = New Font("Arial", 8, FontStyle.Bold) C1Chart1.ChartArea.AxisX.Font = f
- C#
Font f = new Font("Arial", 8, FontStyle.Bold); c1Chart1.ChartArea.AxisX.Font = f;
ForeColor 前景色
ForeColor 属性改变轴线,刻度标记和题目的颜色。改变 ForeColor,需要使用代码将 ForeColor 属性设定为一个正确的颜色,或者在设计时在轴对象的 Visual Studio 属性窗口也能访问到这个属性。
Thickness 厚度
轴的厚度由 Thickness 属性定义。这个值是用像素定义的。一个零厚度的轴也是完全可以画出来的就是没有轴线了。
下面的图表显示了 Y 轴的 Thickness 属性设定为 0 的效果。
轴标题和旋转
给一个轴添加标题能够阐明沿着轴画的是什么。轴的题目可以添加到 Area, XY-Plot, Bar,
HiLo, HiLoOpenClose 或者 Candle 图表。标题或者注释也可以被旋转。
关于如何旋转轴注释的详细信息,参加轴注释的旋转(226 页)。
添加一个轴题目
使用轴的 Text 属性给一个轴添加题目。要删除题目,删除 AxisX 或者 AxisY 对象的默认文字。
注意:Y 轴的轴题目不能添加到极线图,雷达图或者填充雷达图
旋转轴题目
使用 Rotation 属性可以旋转轴的题目到 90,180 和 270 度。对应纵向的轴来说,90 度和 270 度的旋转是最有效的。
轴刻度标记
图表建立轴时就自动带有主要和副的刻度,定制刻度的间隔或者特性就如同设定一套属性那么容易。
TickMajor 和 TickMinor 属性设定轴刻度标记的状态。这个属性可以设定为
TickMarksEnum 的任何一个值。
刻度标记的位置
这些值设定哪里或者是否刻度标签显示
值 | 描述 |
TickMarksEnum.None | 轴上没有刻度标记 |
TickMarksEnum.Cross | 刻度标记和轴交叉 |
TickMarksEnum.Outside | 刻度标记位于轴线上图表区域 的外面 |
TickMarksEnum.Inside | 刻度标记位于轴线上图表区域的里面. |
刻度标记的间隔
AutoMajor 和 AutoMinor 属性设定刻度标记是否由图表自动创建。当这两个属性都设定为 True,图表根据现在的数据逻辑地放置主要的和副的刻度标记。当 AutoMajor 是真,那就不必要使用轴注释了,容易重叠。
UnitMajor 和 UnitMinor 属性设定了刻度间隔的单位。当设定了 UnitMajor 属性,UnitMinor 属性自动被图表设定为 UnitMajor 一半的值。虽然图表自动设定 UnitMinor 属性,也是能够手动地改变为不同的值。
刻度标记的长度
通过使用 TickFactorMajor 和 TickFactorMinor 属性,你可以增加主要的和副的刻度标记的长度。刻度标记的大小需要根据轴线的厚度以及刻度因子。双倍的刻度因子就需要双倍的轴刻度标记的长度。值被设定为数字 1 到 20,超过这个范围的值会被忽略。
下面的图表的图将TickFactorMajor属性设定为5.这就使主要刻度标记的刻度的长度是 5倍的长度。
下面的图表的图将TickFactorMinor 属性设定为5.这就使副刻度标记的刻度的长度是 5倍的长度。
轴格线
格线是指沿着主的/副的刻度标记垂直交叉的间隔主的/副的刻度宽度的线.垂直于轴沿主间隔的线的显示 GridMajor 属性控制,垂直于轴沿副间隔的线的显示 GridMinor 属性控制.格线能够帮助提高图表的可读性,方便你看准确的值.主的和副的格线的外观由 ChartGridStyle 属
性控制.
设定主格线的外观属性
使用 GridMajor 属性设定主格线的外观属性.GridMajor 属性取得
C1.Win.C1Chart.ChartGridStyle 对象,该对象控制主要格线的外观.
设定副格线的外观属性
使用 GridMajor 属性设定副格线的外观属性.GridMajor 属性取得
C1.Win.C1Chart.ChartGridStyle 对象,该对象控制副格线的外观.
OnTop
OnTop 属性定义是否轴的格线和刻度标记覆盖在图表的图之上或者在图表图的后面.设定这个属性为 True 会将格线和刻度标记放置图表图的前景的位置,设定为 False 将图表图放在前景.
轴边界
通常一个图显示它包含的所有数据.但是图表的一个特定部分能够显示固定的轴边界.图表根据数据的最低和最高值以及编号增量定义每个轴的长度.设定 Min, Max, AutoMin,
和 AutoMax 属性可以定制这个定义轴长度的进程.
轴的最小和最大值
使用 Min 和 Max 属性定义轴的值能限制图表大小.如果图表的X轴的值从0到100,那么设定 Min 为 0 和 Max 为 10 只能显示最大到 10 的值.
图表也能够自动计算 Min 和 Max 值.如果 AutoMax 和 AutoMin 属性设定为 True,那么图
表自动设定轴的编号方式以适应数据表.
注意:极线图不能设定X轴.
轴滚动和缩放
当你的图表数据中有相当数量的X值和Y值的情况下,你可以给轴添加滚动条.添加滚动条可以是图表的数据易读因为滚动滚动条你可以同时看到不同块的数据.下图展示了 AxisY 对象有 AxisScrollBar:
只需简单地将 ScrollBar 属性设定为 AxisX或者 AxisY 对象就能设定X轴或者Y轴是否显示滚动条,然后设定图表数据系列的最大和最小值.设定最大和最小值可以避免当你滚动滚动条的时候改变轴的值.
滚动条的外观
C1Chart's AxisScrollbar 类提供了一些有用的属性来控制滚动条的外观,例如它的类型,大小和对齐方式.
C1Chart 的滚动条外观能使用 Appearance 属性定义.
下面的表说明了你设定 Appearance 属性时可选择的不同的轴滚动条类型
Normal | |
Flat | |
XP |
滚动条的宽度可以用 Size 属性设定而对齐方式可以使用它的 Alignment 属性设定.下表显示出了你设定 Alignment 属性时可选择的三种不同的对齐方式.
Near | |
Center | |
Far |
滚动条的缩放
当你使用滚动条在一大堆数据中滚动时,你可以使用缩放来放大重要的数据.
缩放可以在运行时通过点击滚动条上的按钮实现,或者通过代码,使用 ScaleMenuItems 属性.
当 Buttons 属性设定为 ScaleAndScrollButtons(默认)一个内置的缩放菜单就能显示出来.下面的表是 Buttons 属性值的描述
值 | 描述 |
NoButtons | 在滚动条上没有按钮显示 |
ScrollButtons | 在滚动条上显示滚动按钮 |
ScaleButton | 一个缩放的下拉按钮显示.当点击这个下拉按钮,一个内置的缩放菜单就 |
ScaleAndScrollButtons | 默认选项.滚动按钮和缩放按钮都显示在滚动条上 |
如果你想用自制的菜单代替缩放菜单,你可以创建该菜单然后把这个菜单分配到
ScaleMenu 属性.
ScaleMenuItem 集合的每个单独的项都可以在设计时使用 ScaleMenuItem 集合编辑器访问,或者使用 ScaleMenuItems 属性连接新的集合作为轴滚动条的缩放菜单的项目.使用设计器
在设计时添加缩放项目到缩放菜单,需要完成下列步骤.
- 右键点击 C1Chart 控件,从右键菜单中选择属性
- 在属性窗口,展开 ChartArea 节点,展开 AxisX, AxisY,或者 AxisY2 节点,然后展开滚动条.
- 点击 ScaleMenuItems 属性旁边的省略按钮 ,ScaleMenuItem 集合编辑器就出现了.
- 点击新增(Add)给集合新增一个项目,然后设定它的 Scale 和 Text 属性为想要的值.
- 结束时点击OK按钮.
使用代码要增加一个定制的菜单项到缩放菜单,你可以清空已经存在的集合然后给集合天机缩放项目,
如下所示.
Visual Basic
With Me.C1Chart1.ChartArea.AxisX.ScrollBar
.ScaleMenuItems.Clear()
.ScaleMenuItems.Add(0.1, "1:10")
.ScaleMenuItems.Add(0.2, "2:10")
.ScaleMenuItems.Add(0.3, "3:10")
.ScaleMenuItems.Add(0.4, "4:10")
.ScaleMenuItems.Add(0.5, "5:10")
.ScaleMenuItems.Add(0.6, "6:10")
.ScaleMenuItems.Add(0.7, "7:10")
.ScaleMenuItems.Add(0.8, "8:10")
.ScaleMenuItems.Add(0.9, "9:10")
.ScaleMenuItems.Add(1.0, "10:10")
.Scale = 0.1 'initial value of scale
.Visible = True
End With
C#
c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Clear(); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.1, "1:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.2, "2:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.3, "3:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.4, "4:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.5, "5:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.6, "6:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.7, "7:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.8, "8:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(0.9, "9:10"); c1Chart1.ChartArea.AxisX.ScrollBar.ScaleMenuItems.Add(1.0, "10:10"); c1Chart1.ChartArea.AxisX.ScrollBar.Scale = 0.1 ; //initial value of scale c1Chart1.ChartArea.AxisX.ScrollBar.Visible = true;
上面的代码示例中清空已经存在的集合并且给x轴的滚动条添加了新的缩放菜单
项. ScaleMenuItems 属性用来给图表的轴上的滚动条连接新的集合. Add 方法的第一个参数是缩放,必须是0和1之间(包含0和1)的double值.第二个参数,文本,是显示在菜单上的文字.
轴滚动的事件
当你需要给轴滚动定义更多的信息,C1Chart 和 AxisScrollBar 对象有 AxisScroll 事件提
供.例如,使用 AxisScroll 事件你能够规定关于哪个轴被滚动的详细信息,在数据中滚动之前或之后最小值和最大值是什么的详细信息,滚动时表现为哪种类型以及滚动条的方向等详细信息.
AxisScroll 事件的发送对象可以是 AxisScrollBar 对象或者 c1Chart1 对象.如果 AxisScrollBar 对象和 c1Chart1 对象事件都被设定了,AxisScrollBar 事件先触发.但是,所有的轴都触发 AxisScroll 事件,设定 AxisScrollEventArgs 对象的 AxisId 属性来表示改变的轴.
AxisScrollEventArgs 类给 AxisScrollEvent 提供数据,AxisScrollEvent 在内置轴滚动条改变
值的任何时候都触发事件.
下表表示出了 AxisScrollEventArgs 属性的信息
属性 | 描述 |
AxisID | 表示哪个轴滚动的枚举值. |
NewValue | 取得和设定事件结束时轴滚动条的值.轴滚动条的值表示出了最小值和最大值之间的部分 |
OldValue | 取得事件开始时轴滚动条的值.轴滚动条的值表示出了最小值和最大值之间的部分 |
下面的例子中显示了如何使用 AxisScroll 事件引用 AxisScrollEventArgs 类所有的属性.
| ScrollEventType | 取得象征滚动事件类型的值,例如 ThumbPosition, |
|
| ScrollOrientation | 取得象征轴滚动条方向的值 |
|
Visual Basic
Imports C1.Win.C1Chart
Public Sub New() InitializeComponent() c1Chart1.Dock = DockStyle.Fill
Dim scrollbar As C1.Win.C1Chart.AxisScrollBar = c1Chart1.ChartArea.AxisX.ScrollBar scrollbar.Scale = 0.1
scrollbar.Visible = True
AddHandler scrollbar.AxisScroll, AddressOf XAxis_ScrollEvent
AddHandler c1Chart1.AxisScroll, AddressOf XAxis_ScrollEvent
End Sub
Public Sub XAxis_ScrollEvent(ByVal sender As Object, ByVal e As
C1.Win.C1Chart.AxisScrollEventArgs) Handles C1Chart1.AxisScroll
Dim sb As New StringBuilder()
sb.AppendLine("" & Chr(10) & "AxisScroll Event Data") sb.AppendLine(" Sender is: " + sender.ToString()) sb.AppendLine(" ID: " + e.AxisId.ToString())
sb.AppendLine(" OldVal: " + e.OldValue.ToString()) sb.AppendLine(" NewVal: " + e.NewValue.ToString())
sb.AppendLine(" EventType: " + e.ScrollEventType.ToString()) sb.AppendLine(" Orientation: " + e.ScrollOrientation.ToString()) System.Diagnostics.Debug.WriteLine(sb.ToString())
End SubC#
using C1.Win.C1Chart; public Form1()
{
InitializeComponent(); c1Chart1.Dock = DockStyle.Fill;
C1.Win.C1Chart.AxisScrollBar scrollbar = c1Chart1.ChartArea.AxisX.ScrollBar;
scrollbar.Scale = 0.1; // set thescale
to 1/10th
of the full axis width. scrollbar.Visible = true; // visible
scrollbar.AxisScroll += new
C1.Win.C1Chart.AxisScrollEventHandler(XAxis_ScrollEvent); c1Chart1.AxisScroll += new
C1.Win.C1Chart.AxisScrollEventHandler(XAxis_ScrollEvent);
}
public void XAxis_ScrollEvent(object sender,
C1.Win.C1Chart.AxisScrollEventArgs e)
{
StringBuilder sb = new StringBuilder(); sb.AppendLine("\nAxisScroll Event Data"); sb.AppendLine(" Sender is: " + sender.ToString()); sb.AppendLine(" ID: " + e.AxisId.ToString());
sb.AppendLine(" OldVal: " + e.OldValue.ToString()); sb.AppendLine(" NewVal: " + e.NewValue.ToString());
sb.AppendLine(" EventType: "make
+the
scrollbar
e.ScrollEventType.ToString());
sb.AppendLine(" Orientation: "
e.ScrollOrientation.ToString());
System.Diagnostics.Debug.WriteLine(sb.ToString());
}+
代码输出 AxisScroll 事件数据如下.
轴对数比例
当显示有很大规模差异的数据或者希望在同样表格上的数据有指数的变化,通常在一个或多个轴上使用对数比例就能非常方便地实现.在一个对数的轴上,同等距离意味着同等百分数的变化.每个轴都可以设定为指数比例通过设定 IsLogarithmic 属性为 True.如果对数比例运用于一个或两个轴,图表就被称为 Log Scale(对数比例)图表.
使用对数比例,值被根据值的对数物理性地分隔而不是根据值本身.这对给很大范围的大数据量的数据做图表,以及希望描述几何和/或者指数的关系的图表时非常有用的.
不像算术图表改变是以直接的单位为单位计算的,log scale(对数比例)图表以百分数的变化为单位显示的.例如,在一个对数比例图表测量美元,从$1 到 $2 的变化是一个百分率10
0的变化因此图表轴上$1 到 $2 的距离和$50 到$100的距离相同.然而在一个算术的图表中, $50 到$100 的变化从轴上$50 移到$100 的距离会大得多因为$50 的变化和$1 变化是完全不同的.
通常使用的对数
对数可以使用任何基本值表达,包括数字和浮点值.两个最常使用对数的类型包括:- 通常对数-以10为基准写为对数100=2
- 自然对数-使用数学常数e为基准
对数底
当 IsLogarithmic 数学设定为真,你可以使用 LogarithmicBase 属性定义对数底数.默认值是10.如果希望自然对数比例,设定 LogarithmicBase 为小于或等于1的值.如果值是1那么
1的自然对数是0,因为 e0 = 1..一个自然对数是底数是e的对数.注意对数比例当值等于或小于零的时候是没有数学意义的.因此当轴的 IsLogarithmic 属性设定为真,负值和零值是不画
到轴上的.
下图表示出了 LogarithmicBase 设定为默认值10也就是通常的对数时图表是如何表示的
可用示例
关于如何在 C1Chart 中使用对数比例的完整示例,参照实例 LogPlots, 位置在 {*}{+}http://helpcentral.componentone.com/Samples.aspx+*.
对数比例对轴上注释的输出
如果有下面的情况下,任何 C1Chart 的对数底都需要做格式化工作:
- AnnoFormat 属性= NumericManual
- AnnoFormatString 属性包含"**"
- 如果以上两个都是真,那么会输出字符串,这种对数底的对数输出为{0}.
- 如果存在下面的值
- LogarithmicBase = 10,
- AnnoFormat = NumericManual,
- AnnoFormatString = "10**{0}"
那么轴上的注释表示为 power10,"power" 是上标.
对数比例使用的准则
下面的补充准则是对数轴必须遵守的:
- 任何小于或者等于零的数据是不会画的(该数据当做数据漏洞处理),这是由于对数轴只处理大于0的值.也是因为同样的原因,轴和数据的最大/最小边界以及起点属性不能设为零或者比零小。
- 轴的编号增量,标记增量和精度属性等轴是对数的时候是无效的
- 对于对数的X轴,图表类型必须是 plot, bubble, area, HiLo, HiLoOpenClose 或者 candle. 对于Y轴,图表的类型必须是 plot, bubble, area, polar, HiLo,
HiLoOpenClose, candle, radar 或者 illed radar.
- X轴的注释方法不能是 TimeLabels.
UnitMajor 和对数轴
对于对数轴比例,UnitMajor 被作为每个循环基础值的乘数,并提供一个提示作为对数底每个循环中注释的间隔。那就是(UnitMajor*基础循环的值)是大约每个循环注释的值的增量。对于数字对数基础值,这个结果通常是准确的。对于浮点值,对线性比例近似到比较准确的数字。
UnitMajor 和对数轴的详细说明
通常,当使用对数比例,一个图表轴的边界会跨越几个对数底循环。在这种情况下,通常对 UnitMajor 的线性规范就不再有意义了,因为对一个循环合适的值对上一个或下一个循环是没有意义的。UnitMajor 要设定为的值必须适合对数底的每个循环。
如果你不明白,想一下下面的轴你要用什么单个的,固定的,增量的值。
基于上面的原因,对于对数轴,图表假设 UnitMajor 定义了每个循环基础值的小数部分。如下例:
在每个例子中,基础循环的值是1,每个循环的下一个注释值=前面的数+(循环的基础值
- UnitMajor). UnitMajor 的最大值是 LogarithmicBase。UnitMajor 自动的值永远是
LogarithmicBase.
当所有的注释的值计算出来后,一个好的舍入算法就提供出来了,数据很易读。行为也许看起来有些古怪,但是它的结果适合任何的对数底同时给注释获取数字,这样阅读就合理了。
例如,上面的图示对数底为10,但是也有自然对数需要考虑,例如对数底2,对数底X等等。12.1.9 反向和翻转图表轴
当数据表包含很大范围的X或者Y值,有时候一般的图表的结构就不能最有效地显示信息了.把一个有纵向的Y轴并且轴的注释从最小值开始的图表变为图表反向或者轴翻转会在视觉上更能满足要求.因此,C1Chart 给 ChartArea 提供了 Inverted 属性,给轴提供了 Reversed 属性.设定 ChartArea 的 Inverted 为 True 将翻转轴.就是X轴代替Y轴,Y轴代替X轴.最初图表建立的时候X轴水平显示,Y轴纵向显示.这个功能通常用于条线图.注意:
一个反向的条线图是 Inverted 属性设为 True 时的标准条线图.因此,反向条线图没有特殊的 ChartType.
设定 ChartArea 的 Reversed 属性为 True 将翻转轴.这就是说轴的最大的一边代替轴的最小的一边,最小的一边显示在原来最大的一边.最初图表在X轴的左边显示最小值,Y轴的底边显示最小轴.设定轴的 Reversed 属性,会把这些最大值和最小值放在一起(例如X轴的最小值和Y轴的最大值放在一起)
轴注释
沿着轴的注释是任何图表的重要部分.2D图表用数字给轴做注释,这些数字是基于输入到
ChartDataArray 对象的数据.
图表自动创建最适合的注释,即使图表的数据变化了.Annotation 属性能够被改变来完善这个过程.下面的属性列表列出了 C1Chart 给轴注释提供的格式和外观属性.属性
描述
AnnoFormat
一套事先定义的格式用于格式化轴旁边的值
AnnoFormatString
当 AnnoFormat 设定为"NumericManual" 或者
"DateManual" 时使用的.NET 格式化字符串用于格式化轴旁边的值.如果 AnnoFormat 设定为"NumericManual" 或者
"DateManual"并且 AnnoFormatString 是空,那么图表使用
一个计算法则找到最好的可用的格式化方法.AnnoMethod
定义轴旁边显示什么值.选项是"Values",指的是显示系列实际的值.如果是"ValueLabels",指的是显示在 ValueLabels 集合中的元素
ValueLabels
当 AnnoMethod 设定为 "ValueLabels"时,显示在轴旁边的成对的文字/值的集合.当你想在轴上显示字符串而不是数字值的时候这个属性非常有用(例如,你也许要画产品价格图并希望在X轴显示产品名)
AnnotationRotation
允许你旋转注释以减少所占的空间
NoAnnoOverlap
能让你定义是否轴注释是否允许重叠.
C1Chart 包含下面的轴注释种类 - 值注释
- ValueLabels 注释
- 混合注释
下面的主题介绍了不同种类的轴注释并且介绍了轴注释的位置和旋转.
值注释
值注释是图表根据数据本身自动产生数字型注释时使用的.轴注释可以用于任何的轴,任何的图表类型,任何的数据布局.它是由轴的下面的属性控制的.
属性 | 描述 |
AnnoFormat | 取得或设置轴注释的格式 |
AnnoFormatString | 取得或设置用于手动格式化的注释格式字符串 |
设定 AnnoFormat 属性的值为 FormatEnum 值之一会将输入到数据组中的数据格式化
为.NET 的二十二种格式之一.设定 AnnoFormat 为 FormatEnum.NumericManual 或者
FormatEnum.DateManual 允许输入一个格式化好的字符串到 AnnoFormatString 属性中.手动格式化的字符串被命名到.NET 框架,下面提供了更多的信息.日期时间格式的字符串
日期时间格式的字符串分为两个类别
- 标准的日期时间格式的字符串
- 自定义的日期时间格式字符串自定义数字格式字符串
你也能够使用自定义的数字格式字符串定制你的格式化字符串
如果 AnnoFormat 设定为 FormatEnum.NumericManual 并且 AnnoFormatString 为空,那么数字的值会被格式化为和 FormatEnum.NumericGeneral.相同.
如果 AnnoFormat 设定为 FormatEnum. Date Manual 并且 AnnoFormatString 为空,那么日期和时间的值会被格式化为根据轴的最大值和最小值定义的合适的时间间隔.
值标签注释
作为一个非常固定的注释类型. ValueLabels 在特定的轴坐标显示定义的文本,这种注释只在特定坐标放置标签或者当给图表不提供的表格制作标签时是非常有用的.ValueLabels 标签可以被用于任何轴,任何图表类型,以及任何的数据布局,除了饼图.
使用X轴的 ValueLabels,能给非堆积的饼图的每个饼/点显示标签.ValueLabels 按照
ValueLabel 集合中的顺序提供给饼或者点.标签只有X轴 AnnoMethod 属性设定为 ValueLabels
才会显示.标签的显示还由X轴的属性控制,包括 Alignment, AnnoMethod, Compass, Font, ForeColor, Rotation, ValueLabels, VerticalText 和 Visible 属性.不仅X轴的属性影响标签,
Inverted 属性也影响标签的显示,这个属性决定了是否X轴的 Compass 属性的值是 North,
South 或者 East, West
如果 AnnoMethod 属性设定为 AnnotationMethod.ValueLabels,图表将标签放置在沿着一个轴的明确的位置.ValueLabels 属性,是个 ValueLabels 的集合,提供了字符串的列表以及它
们的位置.例如,下面的代码设定图表的标签在位置1,2,和3.
- Visual Basic
With C1Chart1.ChartArea.AxisX.ValueLabels
.Add(1, "one")
.Add(2, "two")
.Add(3, "three")
End With
C1Chart1.ChartArea.AxisX.AnnoMethod = AnnotationMethodEnum.ValueLabels
- C#
ValueLabelsCollecton VlColl = c1Chart1.ChartArea.AxisX.ValueLabels;
VlColl.Add(1, "one");
VlColl.Add(2, "two"); VlColl.Add(3, "three");
c1Chart1.ChartArea.AxisX.AnnoMethod = AnnotationMethodEnum.ValueLabels;
ValueLabels 在设计时也能通过 ValueLabel 集合编辑器修改.关于 ValueLabel 集合编辑器的更多信息,参见 ValueLabel 集合编辑器(56页)
下面的表说明了 ValueLabel 类的 Text, Appearance, BackColor, Color, MarkerSize, 和
Moveable 属性.
注意数字的值的1和2的标签显示为一个箭头.你能够在设计时和运行时设定你的标签的外观.
设计时你能够在 ValueLabel 集合编辑器中选择下面的标签类型来设定标签类型:Label,
Triangle Marker, ArrowMarker, 或者 CustomMarker.标签类的外观属性从
ValueLabelAppearanceEnum.中获得值.运行时可以使用下面的编码设定标签的外观.
Visual Basic
vl.Appearance =
ValueLabelAppearanceEnum.ArrowMarker
C#
vl.Appearance =
ValueLabelAppearanceEnum.ArrowMarker;
注意:在上面的例子中,文字 vl,代表了值标签的变量的名字
如下图所示的 MarkerSize 属性说明了当设定为不同的大小的时候标记如何显示.通过设定每个标记标签的 Moveable 属性为 True,你可以沿着X轴移动M1和M2.这对一个用输入设备定义轴的值从而影响带有笛卡儿坐标的图表非常有用.下图的和 ValueLabels 关联的两个格线帮助两个标记增加视觉效果.
ValueLabels 集合中每个单独的项目可以通过以下三种方法访问:给 ValueLabel 输入所有索引(从0开始),引用要被修改的 ValueLabel 的值.引用 ValueLabel 的文本的值.例如,下
面三行代码全部都是设定 ValueLabels 集合的第一个项,把该项的值从1改为"one":Visual Basic
C1Chart1.ChartArea.AxisX.ValueLabels(0).Text =
"one"
C1Chart1.ChartArea.AxisX.ValueLabels(1.0).Text
=
"one"
C1Chart1.ChartArea.AxisX.ValueLabels("one").Text
=
"one"
C#
c1Chart1.ChartArea.AxisX.ValueLabels[0].Text =
"one";
c1Chart1.ChartArea.AxisX.ValueLabels[1.0].Text
= "one";
c1Chart1.ChartArea.AxisX.ValueLabels["one"].Text
= "one";
混合注释
作为一个非常灵活的注释种类,混合注释包括自动的注释和值标签.每种注释都会在定义的轴坐标上显示可见的文本.这个注释允许值和值标签重叠.轴注释的位置
选择 TickLabelsEnum 枚举中的下列值之一就能使用设定轴注释的位置
值
描述
TickLabelsEnum.None
沿轴没有注释.
TickLabelsEnum.High
竖轴上最大值的附近画注释, 并且在图形区之
内. 对于X轴的注释,如果 Group0的数据不可用而 Group1 的数据可用, Y2 轴定义位置, 否则使用Y轴. 与交叉轴重叠的注释会被消掉.TickLabelsEnum.Low
竖轴上最小值的附近画注释, 并且在图形区之
内. 对于X轴的注释,如果 Group0的数据不可用而 Group1 的数据可用, Y2 轴定义位置, 否则使用Y轴. 与交叉轴重叠的注释会被消掉.TickLabelsEnum.NextToAxis
在轴附近画注释,这是默认值.
High 和 Low定义交叉轴的最大和最小位置.例如,如果给X轴TickLabelEnum定义了High 那么注释就位于Y轴最大值附近,这对图表的顶部不是必须的(Reversed = true)
High 和 Low 的典型用法是如果你有小于Y轴原点的值.在下面的例子中,定义
AxisX.TickLabels = TickLabelsEnum.Low, 注释就为于Y轴-25的值附近.
用程序设定 TickLabelsEnum 的值:- Visual Basic
Dim ax As Axis =c1Chart1.ChartArea.AxisX ax.TickLabels = TickLabelsEnum.Low
- C#
Axis ax = c1Chart1.ChartArea.AxisX;
Ax.TickLabels = TickLabelsEnum.Low;
轴注释的旋转
使用轴的 AnnotationRotation 属性可以逆时针方向按照定义的度数旋转轴注释.这个属性在X轴有很多的注释的时候非常有用.旋转注释+/- 30 – 60 度就能够在水平轴上让很多的注释在有限的空间里表示出来.通过使用 AnnotationRotation 属性,X轴的注释不会重叠,如下所示:
轴注释重叠
当你在轴上没有足够的空间显示你的注释的时候,你可以设定 NoAnnoOverlap 为 True,这
样就能够无条件地阻止画任何的轴注释重叠到前面画的注释上去.
如果你已经设定 AutoMajor 属性为真,那么你就不需要使用 NoAnnoOverlap 属性了,因为
AutoMajor 属性会自动计算主刻度线的最合适的值.
下面显示了 NoAnnoOverlap 属性设定为 True 时的图表
下面显示了 NoAnnoOverlap 属性设定为 False 时的图表
Plot Area
数据画在图表的图形区.在 PlotArea 对象中,你可以定制或者创建 PlotArea 的类型.例如你可以使用 BackColor 和 BackColor2 定义的图形区得背景色.你还可以通过 ForeColor 属性设定 PlotArea 的前景色.
下表列出了图形区的外观属性及其功能
属性 | 描述 |
AlarmZones | AlarmZones 属性得到和现在的 PlotArea 关联的 |
BackColor | 取得或设定 PlotArea 的背景色.从 ChartArea 中继承. |
BackColor2 | 取得或设定第二个背景色. |
Boxed | 取得或设定 PlotArea 是否封装在盒子里 |
ForeColor | 取得或设定 PlotArea 的前景色.从 ChartArea 中继承. |
GradientStyle | 取得和设定背景渐变填充的类型 |
HatchStyle | 取得和设定背景影线填充的类型. |
Opaque | 取得和设定 PlotArea 的背景是否是不透明的 |
Size | 取得 PlotArea 按图标控件的客户端坐标计算的大小 |
View3D | 取得 View3D 对象. |
Visible | 取得和设定 PlotArea 是否可见 |
C1Chart 控件有一个 AlarmZone 集合编辑器,可以在设计时通过 C1Chart 的属性访问.AlarmZone 集合编辑器有一个窗口可以很方便地允许用户编辑/创建 AlarmZones.使用编辑器,用户可以新增/删除一个或多个报警区域,并且修改或者设定每个警报区域的属性.关于
AlarmZone 集合编辑器的更多信息,请参照 AlarmZone 集合编辑器(40页).下面的章节解释什么是警报区域以及在图表中如何使用警报区域.
警报区域
警报区是一系列的能够放置在图形区后面的区段或者形状,但是在图表的背景之前.一般来说,警报区和格线有近似的用法,但是警报区可以被修改这样就能够让警报区更有用并且视觉上更抢眼.而且,警报区可以用来高亮图表中重要的Y值.例如,下面的图表使用了五种不同的警报区(A,B,C,D,F)代表了学生的年级.每个警报区以不同的颜色表示用于和其他的警报区区别开来.注意警报区是如何帮助显示重要的Y值的(在例子中,是学生的累计的点数/年级).
通过使用 UpperExtent 和 LowerExtent 属性,每个警报区的区段能够调整为特定的值.下图显示了警报区的区段通过使用 UpperExtent 和 LowerExtent 属性被调整为一个低的Y值1
8.5和一个高的Y值19.5的效果.
注意:警报区在 XY-Plot, Bar, Stacking Bar 和 Candle 图表中使用最为有效.
你可以通过使用 Shape 属性设定你的警报区的形状.你可以设定警报区为椭圆形的,长方形的,或者多边形的.Shape 属性可以在设计时通过 AlarmZone 集合编辑器设定,或者在运行时设定.使用编码,你需要使用 AlarmZoneShapeEnum 属性来获得圆形的,长方形的,或者多
边形的形状.下面的编码给警报区创建了一个长方形的形状.
Visual Basic
alarmzone.Shape
=
AlarmZoneShapeEnum.Rectangle
C#
alarmzone.Shape
=
AlarmZoneShapeEnum.Rectangle;
下图列出了几个警报区的属性.注意光标指向警报区时下面的文本是如何描述的.这种技术可以使用 AlarmZoneAtCoord 方法做到.AlarmZoneAtCoord 方法根据指定的坐标取回最前面
AlarmZone 的参照.数据和 DataSeries 是多边形数据的两种不同的源类型.下面的图表中,绿色的多边形使用了用户填充的数组源来获得多边形的坐标.其他的多边形使用 DataSeries 来获得用户定义的系列的索引.
警报区提供下列形状:长方形,椭圆形和多边形.当使用多边形,多边形的数据可以明确的指定或者定义一个数据系类(只是XY Plots).这可以很容易的填充曲线下的特定区域,像上面的图标的多边形一样.
增加警报区
AlarmZones 可以在设计时通过 Visual Studio 属性窗口中的 AlarmZone 集合编辑器来添加或者通过 AlarmZones 对象用程序添加.
用编程的方法给 AlarmZonesCollection 添加一个 AlarmZone- Visual Basic
C1Chart1.ChartArea.PlotArea.AlarmZones.AddNewZone()
- C#
c1Chart1.ChartArea.PlotArea.AlarmZones.AddNewZone();
在设计时访问集合编辑器
- 右键点击 C1Chart2D 控件并且从右键菜单中选择 Properties
- 在属性窗口中,展开属性窗口中的 ChartArea 节点 ,然后展开 PlotArea 节点,点击 AlarmZones 属性旁边的省略号
定义警报区属性
警报区有两套基本的属性.第一套属性根据图表的数据值定义警报区的边界.设定
NearExtent 和 FarExtent 属性来使用X轴的范围内的值设定 AlarmZone 的 Left 和 Right 边
界.相反,设定 UpperExtent 和 LowerExtent 属性来使用Y轴的范围内的值设定 AlarmZone 的 Upper 和 Lower 边界.例如,设定上图中的绿色的 AlarmZone 的 NearExtent 为 2.5,FarExtent 为 4.5,LowerExtent 为 8.0,UpperExtent 为 14.0. 注意这些属性的名字是 UpperExtent,
LowerExtent, NearExtent, 和 FarExtent 而不是 X, Y, Height, 和 Width.一个警报去重要的优点是它不是固定的,而是和实际图表数据关联的.这就意味着数据改变了,和数据关联的警报区也会改变因此图表有不止一个视觉效果.要防止 AlarmZones 因为数据改变而消失你可以设定
MinHeight 和 MinWidth 属性.并且,MinHeight 和 MinWidth 属性也允许警报区按固定尺寸放置.
第二套属性定义警报区的类型特性.可以给警报区设定 Shape, BackColor 和 PatternStyle 属性.你可以给警报区选择三种不同的形状类型:长方形的,椭圆形的或者多边形.如果你创建
了一个多边形形状的警报区你需要定义 PolygonSource 属性,这个可以在设计时使用
AlarmZone 集合编辑器定义或者在运行时创建.设定 ForeColor 属性设定 PatternStyle 属性定义的模式的颜色.