ARTICLE

Charting in GDI+ in VB.NET

Posted by john donell Articles | Visual Basic .NET November 10, 2012
This article shows an example of creating simple charts using GDI+ commands in C#.
Reader Level:
Download Files:
 

Here is an example of  creating simple charts using GDI+ commands in C#. I have used the random class to create 5 random percentage values. I then use GDI+ to plot these values on a chart.

I have used a timer control that creates an event once every second. My code for this event is simply the Invalidate command. This forces the form to be refreshed.

My main code is in the OnPaint method. This code is responsible for creating the chart each time the timer event fires. The code is pretty self explanatory. Any problems feel free to email me.

Here is a screenshot of the application and after that, the source code to the OnPaint method.

ChartingWithGDIJODImg-in-vb.net.gif

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim pointarray As Point() = New Point(4){}
Dim r As Random = New Random()
Me.Value1.Text=r.Next(100).ToString()
Me.Value2.Text=r.Next(100).ToString()
Me.Value3.Text=r.Next(100).ToString()
Me.Value4.Text=r.Next(100).ToString()
Me.Value5.Text=r.Next(100).ToString()
Dim a As Single=Convert.ToInt32(Me.Value1.Text.ToString())
a=a*3
a=a/2
a=150-a
Dim b As Single=Convert.ToInt32(Me.Value2.Text.ToString())
b=b*3
b=b/2
b=150-b
Dim c As Single=Convert.ToInt32(Me.Value3.Text.ToString())
c=c*3
c=c/2
c=150-c
Dim d As Single=Convert.ToInt32(Me.Value4.Text.ToString())
d=d*3
d=d/2
d=150-d
Dim f As Single=Convert.ToInt32(Me.Value5.Text.ToString())
f=f*3
f=f/2
f=150-f
Dim newpen As Pen = New Pen(Color.Black)
Dim g As Graphics=Graphics.FromHwnd(Me
.Handle)
'Set point of origin to be 50,50 on the form
g.TranslateTransform(50,50)
g.DrawLine(newpen,1,1,1,150)
g.DrawLine(newpen,1,150,150,150)
'Draw X and y axis
g.DrawLine(newpen,-3,30,3,30)
g.DrawLine(newpen,-3,60,3,60)
g.DrawLine(newpen,-3,90,3,90)
g.DrawLine(newpen,-3,120,3,120)
g.DrawLine(newpen,30,147,30,153)
g.DrawLine(newpen,60,147,60,153)
g.DrawLine(newpen,90,147,90,153)
g.DrawLine(newpen,120,147,120,153)
g.DrawLine(newpen,150,147,150,153)
Dim newfont As Font = New
 Font("Arial",10)

'label Y axis
g.DrawString("100",newfont,New SolidBrush(Color.Black),-25,-5)
g.DrawString("80",newfont,
New SolidBrush(Color.Black),-25,25)
g.DrawString("60",newfont,
New SolidBrush(Color.Black),-25,55)
g.DrawString("40",newfont,
New SolidBrush(Color.Black),-25,85)
g.DrawString("20",newfont,
New
 SolidBrush(Color.Black),-25,115)

'Label X axis

g.DrawString("0",newfont,New SolidBrush(Color.Black),-10,145)
g.DrawString("p1",newfont,
New SolidBrush(Color.Black),25,155)
g.DrawString("p2",newfont,
New SolidBrush(Color.Black),55,155)
g.DrawString("p3",newfont,
New SolidBrush(Color.Black),85,155)
g.DrawString("p4",newfont,
New SolidBrush(Color.Black),115,155)
g.DrawString("p5",newfont,
New
 SolidBrush(Color.Black),145,155)

'Plot points

g.DrawEllipse(New Pen(Color.Blue),30-2,a-2,4,4)
g.DrawEllipse(
New Pen(Color.Red),60-2,b-2,4,4)
g.DrawEllipse(
New Pen(Color.Green),90-2,c-2,4,4)
g.DrawEllipse(
New Pen(Color.Black),120-2,d-2,4,4)
g.DrawEllipse(
New
 Pen(Color.Gold),150-2,f-2,4,4)

'Join the points

pointarray(0) = New Point(30,Convert.ToInt32(a))
pointarray(1) = 
New Point(60,Convert.ToInt32(b))
pointarray(2) = 
New Point(90,Convert.ToInt32(c))
pointarray(3) = 
New Point(120,Convert.ToInt32(d))
pointarray(4) = 
New Point(150,Convert.ToInt32(f))
g.DrawLines(
New Pen(Color.Yellow),pointarray)

End Sub

Login to add your contents and source code to this article
comments
COMMENT USING
PREMIUM SPONSORS
Nevron Software is a global leader in component based data visualization technology for a diverse range of Microsoft centric platforms. Nevron Data Visualization components are used by many companies, educational and government organizations around the world.
Nevron Diagram
SPONSORED BY
Nevron Chart