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






4.81/5 (47投票s)
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 的当前实现对我来说已经相当不错了。但我可以想到许多有用的扩展和增强功能。
- 使用多个数据集,在同一图表中以不同颜色绘制。
- 添加描述属性,如标题、轴名称等。
- 扩展绘制模式,例如点线或虚线等。
自己动手,并告知我您的改进之处。