im looking for a charting class library like Nevron or DevExpress that can handle with very big datasets (2 Millions points per second for example) are there better or more powerful Components? I need a few components to compare it among each other.
thanks
Did you checked the MS build in Charting Solution?
http://weblogs.asp.net/scottgu/archive/2010/02/07/built-in-charting-controls-vs-2010-and-net-4-series.aspx
It is for Winforms and ASP.net and as far as I remember there are plans to implement WPF support (<- but not sure)...
Download here: http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&DisplayLang=en
Documentation here: http://www.microsoft.com/downloads/details.aspx?FamilyId=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F
You cannot physically show more than 300-1200 pixels/inch on a printer and a lot less on a display.
Take those 2 million points and summarise every group of 1000-odd points (via mean, median, mode, maximum or minimum...), so that you end up with 2000 'summarised' points (this would be quick and easy to code). Charting 2000 summarised points makes much more sense for on-screen charting. Use a summary range of 100-500 points, if it will be printed (depending on printer DPI capability and chart size).
Internally, this is what most charting components will have to do, in any case.
Unfortunately it is not that simple - when you "summarize" the points using average for example you'll loose spikes in the data. It also depends on the series being plotted - it is one thing to summarize in a line chart with ascending x values and completely different thing when you summarize a xy scatter point chart. It also depends whether the user has zoomed the chart etc. so a professional charting library will have to take the level of detail (zoom factor), data spikes and series type into account.
In addition some charting libraries will use a direct interface to the video board (like OpenGL or DirectX) which is must faster than when you draw using GDI+ for example. I think you 're going in the right direction as the above two libraries are some of the best out there.
Related
Searching for advice: We are rewriting (in c#) the graphical user interface for the Watershed Risk Analysis Management Framework model, and are using the DotSpatial libraries for our map operations. We need to perform some simple tabulations on raster data, and I'm having trouble finding examples. We need to calculate land use (using national land cover dataset) percentages within polygons, calculate average slope and aspect within polygons. Pretty standard stuff for hydrologic analysis. Does anyone know of tutorials or available code sources for DotSpatial raster analysis? Thanks for your time.
did you find a way to do it? I am in the same position. For the moment, my current workaround is this. I have converted my raster into a List<GeoAPI.Geometries.IPoint> listPts using the center coordinates of the pixels, with the Z value as the corresponding raster pixel value. Then, with my PolygonShapefile, I loop over each feature, and use the feature.Geometry.Covers(listPts[i]) methode to build a list of the points failing in each polygons. After that, I simply cross the two lists together to calculates the corresponding statistics that I need.
I would like a better suggestion, but for the moment, it fits my needs.
I need to draw a graph like the one shown above in my application. The values for Y axis is updated periodically which is obtained from an electronic device and X axis refers to time elapsed . By default, the viewing range of X axis is automatically updated (extends horizontally) as seconds elapse.
One thing I find pretty challenging right off the bat is, users can also manually set the range of X and Y axis, so I need to come up with a flexible way to handle that part.
Can I get some recommendations on handling the above requirements? I prefer WPF but Winforms is fine too. Are there any example projects which solves a problem similar to above?
Or any third-party dlls I can use (for commercial purposes)?
One way I'm considering switching to right now is simply embedding a web control in whatever type of application (winforms, wpf) and then using html/javascript to draw the graph using an opensource library such as : flotr2, Style Chart, jqPlot, Protovis and D3. The benefit of doing it this way is that if you decide to change platforms your graphing doesn't need to change.
Right now I'm using Dynamic Data Display, which is a WPF graphing library.
winforms:
.NET3.5 onwards has chart controls built in (I think)
Im new to this too but you have to create the chart control and then create a series object with the data. Then the update the chart control with the series that contains your data.
There is a sample project here:
http://archive.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=4418
I am developing an application in C# which deals with specific genetic algorithm problem. The execution of the algorithm provides output parameters that are required to draw a chart.The graphic chart consists of 2 independent axis, lets say X is number of generation and Y represents corresponding maximum value of fitness function. To be more specific, I've uploaded picture from Excel so here it is :
http://img97.imageshack.us/img97/2046/graphnb.png
My priority is to make this application fully-functional by allowing user (who sets random execution factors such as mutation percentage, population and generation number, number of elite individuals, etc.) to see generated X-Y graph inside the generated "Form" in C#. I've found site that partially solves my problem, but that's not the whole point (http://csharp.net-informations.com/excel/csharp-excel-chart-picturebox.htm). So I'm asking if there is a way to implement mentioned graph by not using any other applications, but maybe only C# libraries and functions for plotting or something like that? Hope I made myself clear. Best regards.
Free and native answer is http://zedgraph.org/wiki/index.php?title=Main_Page
Does not involve WPF
Does not cost
Only C# libraries
Works inside a .NET WinForm
personally I like XtraChart of DeveloperExpress, but there are also many many other cheaper or more expensive alternatives, also other questions similar to yours here in SO: WPF chart controls
I like to use libraries whenever I can so I can focus on my real business case instead of trying to re-invent the wheel everytime, also because usually it's not trivial to reach the same level of results of people working hard to deliver specific components.
As all have said you have to work on WPF (different platform then WinForms) with 3rd party charting library that are much easier to integrate with your application.
If you want to know further about charting library then you should see this page
Click here
If you can use it, try WPF. It's much better for developing graphically rich user interfaces than standard Windows Forms -- especially if you don't want to use third-party libraries.
Question: Anybody has experience with ZedGraph / MS-Chart controls ?
I am thinking about which to use ?
Basically, I have a tendency to ZedGraph,
because I need .NET framework 2.0 while MS-Chart is 3.5 (and I don't know how well a 3.5 assembly works on 2.0)
and because I could use it privately, too (I use Linux privately).
But I don't know if MS-Charts offers more.
Does ZedGraph for example offer reasonable quality 3d piecharts ?
And reasonable color design, like gradient colors ?
And if it does, is it as simple (or nearly as simple) as MS-Chart controls ?
And does ZedGraph offer databinding, e.g. a datatable from a database ?
I've tried some examples in my free time.
With a bit of minor tweaking, ZedGraph's quality is just as good as MS/Dundas Chart controls.
Here's an example of a 3d piechart:
http://www.codeproject.com/KB/web-image/3dpiechart.aspx
Zedgraph is a bit more user-unfriendy than MS/Dundas chart controls.
However, Zedgraph is also more powerful and faster, while the rendering quality is the same.
Plus Zedgraph is cross-platform, while MS-Chart controls is limited to windows (by license, not by technique).
So the way to go is definitely Zedgraph.
A deeper reason can be found here:
http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/thread/1271d98f-f52e-424d-a0dc-8bc831a5f4b8
I have used MSCharts since they went RTM and have been pleased with them for many different kinds of charts; however, I find them deficient when I want to generate a plot or a graph. For these, ZedGraph seems to offer a more appealing solution.
The MSChart Samples environment can give you a good idea of the capabilities of that library. You can compare the samples environment to the demos from the ZedGraph wiki to see they have a lot of overlapping capability. I've just found that this kind of chart is pretty difficult to create with MSChart.
I have used them to create complex dashboards, and they are very stable, well written pieces of code. However, you have to consider the fact that whichever you would be betting on, would actually be there for a long time.
Additionally, if you're using MSCharts, you would be able to use the same knowledge to build charts for web applications as well (on ASP.net)
However, if you are using them in a server ASP.net based environment, the only issue with MSCharts is that they are not dynamic charts i.e. they are rendered as images and returned from the server. They use image maps to support HyperLinks / Tooltips, and work pretty well.
I haven't used MSChart, but from my experience with ZedGraph, you can't make 3-d charts. ZedGraph also requires a bit of tweaking to make really sharp looking graphs (if you notice, most of their examples don't qualify for this title).
image http://prod.triplesign.com/map.jpg
How can I produce a similar output in C# window forms in the easiest way?
Is there a good library for this purpose?
I just needs to be pointed in the direction of which graphic library is best for this.
You should just roll your own in a 3d graphics library. You could use directx. If using WPF it is built-in, you can lookup viewport3d. http://msdn.microsoft.com/en-us/magazine/cc163449.aspx
In graphics programming what you are building is a very simple version of a heightmap. I think building your own would give your greater flexibility in the long run.
So a best library doesn't exist. There are plenty of them and some are just for different purposes. Here a small list of possibilities:
Tao: Make anything yourself with OpenGL
OpenTK: The successor of the Tao framework
Dundas: One of the best but quite expensive (lacks in real time performance)
Nevron: Quite good, but much cheaper (also has problems with real time data)
National Instruments: Expensive, not the best looking ones, but damn good in real time data.
... Probably someone else made some other experiences.
Checkout Microsoft Chart Controls library.
Here's how I'd implement this using OpenGL.
First up, you will need a wrapper to import the OpenGL API into C#. A bit of Googling led me to this:
CsGL - OpenGL .NET
There a few example programs available to demonstrate how the OpenGL interface works. Play around with them to get an idea of how the system works.
To implement the 3D map:
Create an array of vectors (that's not the std::vector/List type but x,y,z triplets) where x and y are along the horizontal plane and z is the up amount.
Set the Z compare to less-than-or-equal (so the overlaid line segments are visible).
Create a list of quads where the vertices of the quads are taken from the array in (1)
Calculate the colour of the quad. Use a dot-product of the quad's normal and a light source direction to get a value to shade value, i.e. normal.light of 1 is black and -1 is white.
Create a list of line segments, again from the array in (1).
Calculate the screen position of the various projected axes points.
Set up your camera and world->view transform (use the example programs to get an idea of how to do this).
Render the quads and lines, OpenGL will do the transformation from world co-ordinates (the list in (1)) to screen space. Draw the labels, you might not want to do this using OpenGL as the labels shouldn't scale with distance from camera, otherwise they could get too small to read.
Since the above is quite a lot of stuff, there isn't really the space (and time on my part) to post working code (but someone else might add something if you're lucky). You could break the task down and ask questions on the parts you don't quite understand.
Have you tried this... gigasoft data visualization tools (Its not free)
And you can checkout the online wireframe demo here