line chart example pls

  • Thread starter Thread starter Zach
  • Start date Start date
Z

Zach

Hi,

I am completely new to VC#.NET graphics code and would
like some help to stop me wasting my time up blind alleys.

I am looking for a line charting code example. Nothing posh or airy
fairy, just a simple area with annotated axis and a graph.

I am not looking for code to create a multi applicable graphic contol and
I don't want to buy a library. I have been around the Code Project and I
do have forms literature (which I do not find to be so helpful on the
subject
at hand).

Many thanks,
Zach.
 
Thanks for your suggestion, however,

I had had a look at that article already.
The code is quite sophisticated, besides
when I loaded it to the VC# IDE it wouldn't run.
The code complexity is such that I cannot
extract just the essentials I need.

My last attempt was to convert the following code I found to a normal cs
file
but I ran aground. If you have time, could you help me out on this?

<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<%@ Import Namespace="System.Drawing.Imaging" %>

<script language="C#" runat="server">

class LineChart
{
//Sample ASPX C# LineChart Class, Steve Hall, 2002
public Bitmap b;
public string Title="Default Title";
public ArrayList chartValues = new ArrayList();
public float Xorigin=0, Yorigin=0;
public float ScaleX, ScaleY;
public float Xdivs=2, Ydivs=2;

private int Width, Height;
private Graphics g;
private Page p;

struct datapoint {
public float x;
public float y;
public bool valid;
}

//initialize
public LineChart(int myWidth, int myHeight, Page myPage) {
Width = myWidth; Height = myHeight;
ScaleX = myWidth; ScaleY = myHeight;
b = new Bitmap(myWidth, myHeight);
g = Graphics.FromImage(b);
p = myPage;
}

public void AddValue(int x, int y) {
datapoint myPoint;
myPoint.x=x;
myPoint.y=y;
myPoint.valid=true;
chartValues.Add(myPoint);
}

public void Draw() {
int i;
float x, y, x0, y0;
string myLabel;
Pen blackPen = new Pen(Color.Black,1);
Brush blackBrush = new SolidBrush(Color.Black);
Font axesFont = new Font("arial",10);

//first establish working area
p.Response.ContentType="image/jpeg";
g.FillRectangle(new
SolidBrush(Color.LightYellow),0,0,Width,Height);
int ChartInset = 50;
int ChartWidth = Width-(2*ChartInset);
int ChartHeight = Height-(2*ChartInset);
g.DrawRectangle(new
Pen(Color.Black,1),ChartInset,ChartInset,ChartWidth,ChartHeight);

//must draw all text items before doing the rotate below
g.DrawString(Title, new Font("arial",14), blackBrush,
Width/3, 10);
//draw X axis labels
for(i=0; i<=Xdivs; i++) {
x=ChartInset+(i*ChartWidth)/Xdivs;
y=ChartHeight+ChartInset;
myLabel = (Xorigin + (ScaleX*i/Xdivs)).ToString();
g.DrawString(myLabel, axesFont, blackBrush, x-4,
y+10);
g.DrawLine(blackPen, x, y+2, x, y-2);
}
//draw Y axis labels
for(i=0; i<=Ydivs; i++) {
x=ChartInset;
y=ChartHeight+ChartInset-(i*ChartHeight/Ydivs);
myLabel = (Yorigin + (ScaleY*i/Ydivs)).ToString();
g.DrawString(myLabel, axesFont, blackBrush, 5, y-6);
g.DrawLine(blackPen, x+2, y, x-2, y);
}

//transform drawing coords to lower-left (0,0)
g.RotateTransform(180);
g.TranslateTransform(0,-Height);
g.TranslateTransform(-ChartInset,ChartInset);
g.ScaleTransform(-1, 1);

//draw chart data
datapoint prevPoint = new datapoint();
prevPoint.valid=false;
foreach(datapoint myPoint in chartValues) {
if(prevPoint.valid==true) {
x0=ChartWidth*(prevPoint.x-Xorigin)/ScaleX;
y0=ChartHeight*(prevPoint.y-Yorigin)/ScaleY;
x=ChartWidth*(myPoint.x-Xorigin)/ScaleX;
y=ChartHeight*(myPoint.y-Yorigin)/ScaleY;
g.DrawLine(blackPen,x0,y0,x,y);
g.FillEllipse(blackBrush,x0-2,y0-2,4,4);
g.FillEllipse(blackBrush,x-2,y-2,4,4);
}
prevPoint = myPoint;
}

//finally send graphics to browser
b.Save(p.Response.OutputStream, ImageFormat.Jpeg);
}

~LineChart() {
g.Dispose();
b.Dispose();
}
}


void Page_Load(Object sender, EventArgs e) {
LineChart c = new LineChart(640, 480, Page);
c.Title="My Line Chart";
c.Xorigin=0; c.ScaleX=500; c.Xdivs=5;
c.Yorigin=0; c.ScaleY=1000; c.Ydivs=5;
c.AddValue(50,50);
c.AddValue(100,100);
c.AddValue(200,150);
c.AddValue(450,450);
c.Draw();
}

</script>

Zach.
 
Have you tried using the ZedGraph Web Control version? I develop using
Windows Forms, not Web Forms, so I can't say this for sure, since I haven't
used it, but I would imagine that it would just be a matter of setting
properties on an object in the code behind. The control should take care of
drawing the chart to an image using the information you provide it. In the
long run it might be worth the time to figure out how to use the control
rather than trying to figure out how to draw it all yourself.
 
Hi Tim,

When I loaded the code to my IDE it produced *errors*
so there wasn't a lot I could do with it.
I have now come across www.devx.com/dotnet/Article/20077
This is a tutorial. I haven't started on it yet, but it seems quite OK,
so I will dig into that, and hope it will provide me with what I am
after.

Zach.
 
Back
Top