![]() |
Multimedia »
GDI+ »
General
Intermediate
Drawing a Bar ChartBy Karthikeyan MuthurajanThis is an article about drawing a bar chart for a given set of values. |
VB.NET 1.0, .NET 1.1, Win2K, WinXP, Win2003, GDI+, VS.NET2003, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||

This article describes a procedure that will be useful to draw a bar chart in a form, with all features. Using this procedure, any number of graphs can be drawn in a form, by setting the X axis and Y axis.
objEnum As IDictionaryEnumerator - the data from which the graph has to be drawn.
intItemCount As Integer - number of items to show in a graph (you can get from the DictionaryEnumerator itself).
strGraphTitle As String - title has to be drawn for the graph.
Xaxis As Integer - starting X axis.
Yaxis As Integer - starting Y axis.
MaxWidth As Int16 - maximum width of the graph (for calculation purpose).
MaxHt As Int16 - maximum height of the graph (for calculation purpose).
clearForm As Boolean - whether the Form has to clear or not.
Optional ByVal SpaceRequired As Boolean - whether space is required in between 2 graphs. The graph has to be called in the Paint event of the Form and the parameters should be resized in the Resize event of the Form.
LoadColorArray procedure is used to have required colors to draw the graph. Because, if we use RGB, overall the graph will not be good visibly.
The parameter clearForm can be used when you need to show 2 graphs in the same Form; it will be useful then...
Public Sub drawBarChart(ByVal objEnum As IDictionaryEnumerator, _
ByVal intItemCount As Integer, ByVal strGraphTitle As String, _
ByVal Xaxis As Integer, ByVal Yaxis As Integer, _
ByVal MaxWidth As Int16, ByVal MaxHt As Int16, _
ByVal clearForm As Boolean, _
Optional ByVal SpaceRequired As Boolean = False)
Dim intGraphXaxis As Integer = Xaxis
Dim intGraphYaxis As Integer = Yaxis
Dim intWidthMax As Integer = MaxWidth
Dim intHeightMax As Integer = MaxHt
Dim intSpaceHeight As Integer
Dim intMaxValue As Integer = 0
Dim intCounter As Integer
Dim intBarWidthMax
Dim intBarHeight
Dim strText As String
Try
Dim grfx As Graphics = CreateGraphics()
If clearForm = True Then
grfx.Clear(BackColor)
End If
grfx.DrawString(strGraphTitle, New Font("VERDANA", 12.0, _
FontStyle.Bold, GraphicsUnit.Point), _
Brushes.DeepPink, intGraphXaxis + (intWidthMax / 4), _
(intGraphYaxis - intHeightMax) - 40)
'Get the Height of the Bar
intBarHeight = CInt(intHeightMax / intItemCount)
'Get the space Height of the Bar
intSpaceHeight = _
CInt((intHeightMax / (intItemCount - 1)) - intBarHeight)
'Find Maximum of the input value
If Not objEnum Is Nothing Then
While objEnum.MoveNext = True
If objEnum.Value > intMaxValue Then
intMaxValue = objEnum.Value
End If
End While
End If
'Get the Maximum Width of the Bar
intBarWidthMax = CInt(intWidthMax / intMaxValue)
' Obtain the Graphics object exposed by the Form.
If Not objEnum Is Nothing Then
intCounter = 1
objEnum.Reset()
'Draw X axis and Y axis lines
grfx.DrawLine(Pens.Black, intGraphXaxis, _
intGraphYaxis, intGraphXaxis + intWidthMax, _
intGraphYaxis)
grfx.DrawLine(Pens.Black, intGraphXaxis, _
intGraphYaxis, intGraphXaxis, _
(intGraphYaxis - intHeightMax) - 25)
While objEnum.MoveNext = True
'Get new Y axis
intGraphYaxis = intGraphYaxis - intBarHeight
'Draw Rectangle
grfx.DrawRectangle(Pens.Black, _
New Rectangle(intGraphXaxis, intGraphYaxis, _
intBarWidthMax * objEnum.Value, intBarHeight))
'Fill Rectangle
grfx.FillRectangle(objColorArray(intCounter), _
New Rectangle(intGraphXaxis, intGraphYaxis, _
intBarWidthMax * objEnum.Value, intBarHeight))
'Display Text and value
strText = "(" & objEnum.Key & "," & objEnum.Value & ")"
grfx.DrawString(strText, New Font("VERDANA", 8.0, _
FontStyle.Regular, GraphicsUnit.Point), _
Brushes.Black, intGraphXaxis + _
(intBarWidthMax * objEnum.Value), intGraphYaxis)
intCounter += 1
If SpaceRequired = True Then
intGraphYaxis = intGraphYaxis - intSpaceHeight
End If
If intCounter > objColorArray.GetUpperBound(0) Then
intCounter = 1
End If
End While
If clearForm = True Then
grfx.Dispose()
End If
End If
Catch ex As Exception
Throw ex
End Try
End Sub
We can have any number of graphs in a single form, and settings of a graph can be changed at runtime. Using LoadColorArrays procedure (Not pasted here. But available in the demo project) we can give good colors in the graph which will attract the users very much.
| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 25 Jun 2004 Editor: Smitha Vijayan |
Copyright 2004 by Karthikeyan Muthurajan Everything else Copyright © CodeProject, 1999-2009 Web10 | Advertise on the Code Project |