Best charting package

R

Robert Dede

Hi,

I wanted to add; if anyone is to try the below example, a few more lines of
code will simplify the task...

At the top of the file add a using statement...
using Gigasoft.ProEssentials.Enums;

Within the formload event, at top of initialization...
Random Rand_Num = new Random(unchecked((int)DateTime.Now.Ticks));

And the example below is actually plotting 96,000 points as DataShadows is
on by default (so fast, I first didn't realize it.) Performance can be
doubled with...
Pesgo1.PePlot.DataShadows = Gigasoft.ProEssentials.Enums.DataShadows.None;

best regards,
Robert Dede
Gigasoft, Inc.
www.gigasoft.com


Robert Dede said:
Hi Bob / Chris,

I downloaded Nevron and I'm now prepared to see for myself, but since I
don't know the Nevron product, Bob, please post a small code sample.
Porting the code below to a nevron nChartControl1 that I can paste into a
formload event. Just a simple xy line chart, 6 series, 8000 data points
each series, thin solid lines.

// Prepare images in memory, prevents flicker, simply plays image to
memory and then bitblits to screendc //
Pesgo1.PeConfigure.PrepareImages = true;
// Pass Data //
Pesgo1.PeData.Subsets = 6;
Pesgo1.PeData.Points = 8000;
Int32 s, p;
float fOffset;
for(s = 0; s < 6; s++)
{
fOffset = 1.0F;
for(p = 0; p < 8000; p++)
{
fOffset += (float)((Rand_Num.NextDouble() * 50.0));
Pesgo1.PeData.X[s, p] = fOffset;
Pesgo1.PeData.Y[s, p] = (float)((p + 1) + (Rand_Num.NextDouble() *
3000)) + ((s * 140.0F));
}
Pesgo1.PeLegend.SubsetLineTypes =
Gigasoft.ProEssentials.Enums.LineType.ThinSolid;
}
// Various other common features //
Pesgo1.PePlot.Method = SGraphPlottingMethod.Line;
Pesgo1.PeGrid.LineControl = GridLineControl.Both;
Pesgo1.PeConfigure.RenderEngine = RenderEngine.Hybrid; // This won't port
as unique to ProEssentials, but use what ever means to improve performance
as would be used in the real-world.
Pesgo1.PeConfigure.AntiAliasGraphics = false;
Pesgo1.PeConfigure.AntiAliasText = false;
Pesgo1.Refresh();

If interested in the RenderEngine feature, or any feature, simply go to
www.gigasoft.com/webhelp/peonlref.htm for info. Use search or index to
find what you want fastest.

The above plot renders "instantly", and due to the noisy data, no data
filtering is being invoked, which ProEssentials will also do if the data
is smooth, allowing even more potential performance gains.

Or if Nevron has something similar, this example shows how to pass data
directly, essentially a memcpy, capable of passing a million points
instantly. Performance in passing data is just as important as performance
in rendering.

Int32 s, p, o;
float fOffset;
float[,] pXData = new float[6, 8000];
float[,] pYData = new float[6, 8000];
for(s = 0; s < 6; s++)
{
fOffset = 1.0F;
for(p = 0; p < 8000; p++)
{
fOffset += (float)((Rand_Num.NextDouble() * 50.0));
pXData[s, p] = fOffset;
pYData[s, p] = (float)((p + 1) + (Rand_Num.NextDouble() * 3000)) +
((s * 140.0F));
}
Pesgo1.PeLegend.SubsetLineTypes =
Gigasoft.ProEssentials.Enums.LineType.ThinSolid;
}
Gigasoft.ProEssentials.Api.PEvsetW(Pesgo1.PeSpecial.HObject,
Gigasoft.ProEssentials.DllProperties.XData, pXData, 48000);
Gigasoft.ProEssentials.Api.PEvsetW(Pesgo1.PeSpecial.HObject,
Gigasoft.ProEssentials.DllProperties.YData, pYData, 48000);

I'm looking forward to your post.

best regards,

Robert Dede
Gigasoft, Inc.





Joe said:
Thanks to all those who replied. I knew there would be differences in
opinions and I also knew that there would be feed back from the companies
that make some of the chart packages.

As for my decision, I haven't made one just yet. Here's what I've learned
from my different evals. Each chart package was tested with a wide range
of data. The performance was tested with the following data samples:
100 series and 30 data points per series
3370 series and 30 data points per series
870 series and 4 data points per series

We also had different data types on the X-Axis. Int, double, DateTime,
Text

ProEssentials:
Pro - Excellent performance (probably the best)
Pro - Displays labels on the axes rounded correctly. For example if the Y
values ranged from 2.8 - 27.13, the labels display in round numbers and
divided up nicely.
Pro - The DateTime handling is very good.
Pro - Handles all value types on the X-Axis (text requires setting a
label for those that don't know)
Pro - Auto scales values for the Axis labels. For example 5,000,000 will
display as 5m (or similar)
Cons - Well the unmanaged code causes a slight problem for us. Not so
much because of the code itself but the context menus and charting panels
themselves give an old appearance and cannot be made to match my
application


ChartFX:
Pro - There performance is very good
Pro - Looks very nice and has very useful extensions.
Pro - DateTime handling is very good.
Pro - Axes labels scale very well. Similar to ProEssentials except
ChartFX doesn't do the Auto scaling unless we use the log.
Con - There is a delay with the initial painting of the charts. For
example if you scroll a panel to a chart that was out of view, the chart
will take some time to draw with large data.

Nevron:
Pro - Has a lot of "eye candy"
Con - Performance doesn't seem to be a match to ProEssentials or ChartFX
Con - You need to know your series types in advance or creating them. You
cannot toggle using a type or gallery property (correct me if I'm wrong)
Since I hit the 2 Cons above I stopped testing it early.

Infragistics:
This one had it's own set of issues so I didn't continue this eval
either. It's very possible I didn't completely understand the
documentation on manually populating it.

As a final note I would like to say to all the charting companies that
are following this:
I understand all the complexities that go into creating these packages. I
tested some of the features which are most important to us to help come
to a decision. If I was incorrect with any of my evals please let me
know. We have not made a firm decision yet and I do have a little time
left to do a little more testing.

-Joe
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top