65.9K
CodeProject 正在变化。 阅读更多。
Home

DataPlotter - 2D数据的线性或对数显示

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (47投票s)

2003 年 10 月 13 日

CPOL

4分钟阅读

viewsIcon

178188

downloadIcon

6822

DataPlotter 是一个用于 2D 数据图形显示的 .NET 控件。对于 X 和 Y 轴,都可以选择线性或对数(任意基数)缩放。

引言

DataPlotter 是一个用于 2D 数据图形显示的 .NET 控件。对于 X 和 Y 轴,都可以选择线性或对数(任意基数)缩放。同时,也可以为两个轴指定数据范围。

也许它也会引起其他人的兴趣。至少它可以作为另一个关于如何在 .NET 中操作 GDI+ 的示例。

背景

在 .NET 世界中进行图表绘制,仍然可以使用老式的 MSChart ActiveX 控件,或者您需要购买市面上新的 .NET 控件。

由于 MSChart 控件不符合我的需求,而且我也不想花钱,所以我决定自己开始做。这个项目没有什么花哨或新颖之处——这只是我在 .NET 图形方面的第一步。

使用代码

DataPlotter 的实现很简单:它是一个 .NET Windows 控件库,带有一系列属性。其他所有内容都在 OnPaint 函数中完成。

以下是属性列表:

Color ColorDraw 数据线的颜色
Color ColorGrid 网格线的颜色
Color ColorBg 背景颜色
Color ColorAxis 轴和文本的颜色
Font FontAxis 文本的字体
long PenWidth 数据线的宽度
DrawModeType drawMode 数据点的绘制模式(Line, Dot, Bar)
long BorderTop 顶部的内边距
long BorderLeft 左侧的内边距
long BorderBottom 底部的内边距
long BorderRight 右侧的内边距
double XRangeStart X 轴数据范围的起始值
double XRangeEnd X 轴数据范围的结束值
double YRangeStart Y 轴数据范围的起始值
double YRangeEnd Y 轴数据范围的结束值
double XGrid X 方向线性网格的间距。日志视图忽略。
double YGrid Y 方向线性网格的间距。日志视图忽略。
long XLogBase X 方向对数视图的基数。如果小于 2,则显示线性视图。
long YLogBase Y 方向对数视图的基数。如果小于 2,则显示线性视图。
double[] XData 要显示的 X 数据。
double[] YData 要显示的 Y 数据。

关于一些属性的提示

  • 边距定义了内部轴矩形。在左侧和底部使用更大的边距,以便为刻度数字留出足够的空间。
  • 如果 LogBase 属性低于 2,则选择线性缩放。否则,该数字是对数缩放的基数。通常,使用 0 进行线性缩放,使用 10 进行对数缩放。
  • 对于对数缩放,请为 RangeStart 和 RangeEnd 属性使用完整的数量级,例如,对于 LogBase 为 10,使用 0.01 到 1000。
  • 数据数组的大小必须相同,当然。

OnPaint 函数的简要说明

  • 检查属性值是否一致。
  • 准备图形工具。有用于图形、网格线和轴的画笔,以及用于刻度编号的画刷。
  • 内部轴矩形是通过从客户端矩形大小中减去边距属性来计算的。
  • 网格线是为 X 和 Y 方向绘制的。这里也写上了刻度数字。
  • 然后创建轴矩形。
  • 数据数组被转换为一个点数组。值从 RangeStart 到 RangeEnd 被映射到轴网格的点上,同时考虑 LogBase 刻度。无效点(通过异常处理程序检测)会被跳过,并使用最后一个有效点。
  • 点根据 DrawMode 进行绘制。

DataPlotter 是一个程序集,可以像 DataPlotterTest 应用程序中所示的那样使用。这个演示有四个按钮,带有各种可能的线性/对数缩放的示例数据。还有一个属性网格,用于查看/更改 DataPlotter 的属性。

下一步

DataPlotter 的当前实现对我来说已经相当不错了。但我可以想到许多有用的扩展和增强功能。

  • 使用多个数据集,在同一图表中以不同颜色绘制。
  • 添加描述属性,如标题、轴名称等。
  • 扩展绘制模式,例如点线或虚线等。

自己动手,并告知我您的改进之处。

© . All rights reserved.