Means you have to reference System.Windows.Forms and System.Windows.Forms.DataVisualization, even though you might be doing this in a console application. That said, it also includes a set of data manipulation functions, some of which are even finance-specific:
using System;
using System.Drawing;
using System.Windows.Forms.DataVisualization.Charting;
namespace Sandbox
{
class Program
{
static void Main(string[] args)
{
// set up some data
var xvals = new[]
{
new DateTime(2012, 4, 4),
new DateTime(2012, 4, 5),
new DateTime(2012, 4, 6),
new DateTime(2012, 4, 7)
};
var yvals = new[] { 1,3,7,12 };
// create the chart
var chart = new Chart();
chart.Size = new Size(600, 250);
var chartArea = new ChartArea();
chartArea.AxisX.LabelStyle.Format = "dd/MMM\nhh:mm";
chartArea.AxisX.MajorGrid.LineColor = Color.LightGray;
chartArea.AxisY.MajorGrid.LineColor = Color.LightGray;
chartArea.AxisX.LabelStyle.Font = new Font("Consolas", 8);
chartArea.AxisY.LabelStyle.Font = new Font("Consolas", 8);
chart.ChartAreas.Add(chartArea);
var series = new Series();
series.Name = "Series1";
series.ChartType = SeriesChartType.FastLine;
series.XValueType = ChartValueType.DateTime;
chart.Series.Add(series);
// bind the datapoints
chart.Series["Series1"].Points.DataBindXY(xvals, yvals);
// copy the series and manipulate the copy
chart.DataManipulator.CopySeriesValues("Series1", "Series2");
chart.DataManipulator.FinancialFormula(
FinancialFormula.WeightedMovingAverage,
"Series2"
);
chart.Series["Series2"].ChartType = SeriesChartType.FastLine;
// draw!
chart.Invalidate();
// write out a file
chart.SaveImage("chart.png", ChartImageFormat.Png);
}
}
}
Gives the following result:
11 comments:
Thanks so much for this - we're starting to design some pages to show report data - and need to also save out the chart to include in a Word Doc.
This is the approach we'll look to use - exactly what we need - cheers !
Thanks so much for this - we're starting to design some pages to show graphs with data from a SQL Server proc - we need to also save out the same chart to include in a Word Doc.
This is the approach we'll look to use - exactly what we need - cheers !
Thanks again - I made use of your example - and got it working within ASP.NET - some minor differences.
I did a blog post about it - and linked to your post - thanks again !
http://sharepointroot.com/2013/12/06/datavisualization-charting-using-asp-net-and-c/
Hi!
I get an error named: " The name 'Color' does not exist in the current context " and " The type or namespace name 'Size' could not be found (are you missing a using directive or an assembly reference?) "
What can I do?
Thanks
Hi
I get an error "The type or namespace name 'Size' could not be found (are you missing a using directive or an assembly reference?)" and "The name 'Color' does not exist in the current context"
What can I do? Thanks
Great article! I was looking for something simple, it was hard to find any clear way to use these libraries. Thanks for sharing.
Great article! I was looking for something simple and clear to understand the use of these libraries. Thanks for sharing!
Thanx!
It's very helpful.
nice example, do you know how to fill a serie with a lot of data, a year maybe. and put interval of 1 week or 1 day, without zoom need, only scroll bar
nice example, do you know how to fill a serie with a lot of data, a year maybe. and put interval of 1 week or 1 day, without zoom need, only scroll bar
Goodness, something like 28k views for this post! Apologies to all for not responding to your comments and thanks for getting in touch -- in truth I've put all these posts out there fully expecting no-one to read them, so actually having some interest is -- wonderfully surprising.
Post a Comment