DataPlotter is a .NET control for graphical display of 2D data. For both the X and Y axis a linear or logarithmic (any base) scaling can be selected. Also for both axis the data range can be specified.
Maybe it is of interest to somebody else out there. At least it can be used as another sample on how to fiddle with GDI+ in .NET.
For charting in the .NET world there is still the good old MSChart ActiveX control or you have to buy one of the new .NET controls on the market.
Since neither the MSChart control made me happy for my purpose nor did I want to spend money, I decided to start something on my own. This project is nothing fancy or new -- it's just my first steps in .NET graphics.
Using the code
The implementation of
DataPlotter is quite simple: It's a .NET Windows control library with a bunch of properties. Everything else happens in the
These are the properties:
|The color of the data line|
|The color of the gird lines|
|The background color|
|The color of the axis and text|
|The font for the text|
|The width of the data line|
|Draw mode for the data points (|
|The internal border at the top|
|The internal border at the left|
|The internal border at the bottom|
|The internal border at the right|
|The start of the data range on the x axis|
|The end of the data range on the x axis|
|The start of the data range on the y axis|
|The end of the data range on the y axis|
|The spacing for the linear grid in x direction. Ignored for log. views|
|The spacing for the linear grid in y direction. Ignored for log. views|
|The base for log. views in x direction. If < 2 then a linear view is displayed|
|The base for log. views in y direction. If < 2 then a linear view is displayed|
|The data to be displayed for x.|
|The data to be displayed for y.|
A few hints on some properties:
- The borders define the inner axis rectangle. Use bigger borders on the left and bottom to have enough space for the scaling numbers.
- If a
LogBase property is below 2 then a linear scaling is selected. Otherwise the number is the base for logarithmic scaling. Typically use 0 for linear and 10 for logarithmic scales.
- For logarithmic scaling, use full decades for the
RangeEnd properties, e.g. 0.01 to 1000 for a
LogBase of 10.
- The Data arrays must be of the same size of course.
A short walkthrough of the
- Check the property values for consistency.
- Prepare the graphical tools. There are pens for the graph, grid lines and axis and a brush for scale numbering.
- The inner axis rectangle is calculated by deducting the border properties from the client rectangle size.
- The grid lines are drawn for X and Y directions. Here also the scale numbers are written.
- Then the axis rectangle is created.
- The data arrays are transformed into an array of points. The values from
RangeEnd are mapped onto points of the axis grid considering the
LogBase scales. Invalid points (detected by exception handler) are skipped by reusing the last valid point.
- The points are drawn according to the
DataPlotter is an assembly that can be used as shown in the DataPlotterTest application. This demo has four buttons with sample data for the possible linear/logarithmic scalings. There is also a property grid so see/change the
Where to go from here
The current implementation of
DataPlotter served my purpose quite well. But there are many useful extensions and enhancements I can think of:
- Use more than one set of data to be drawn in different colors in the same diagram.
- Add description properties like title, names for the axis etc.
- Extend draw modes, e.g. dotted or dashed lines etc.
Help yourself and let me know about your own enhancements.