12,948,130 members (84,936 online)
alternative version

#### Stats

128.8K views
35 bookmarked
Posted 17 Jun 2004

# Drawing a Bar Chart

, 25 Jun 2004
 Rate this:
This is an article about drawing a bar chart for a given set of values.

## Introduction

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.

## Input Parameters

• `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.

A list of licenses authors might use can be found here

## Share

 Web Developer India
Working as a S/W Engineer with 3+ years of experience
Selected as Microsoft India Community Star

## You may also be interested in...

 First Prev Next
 objColorArray joyce1629-Sep-10 23:53 joyce16 29-Sep-10 23:53
 May i know wat is objColorArray?Must we declare it ourself?
 doing it in vb 6 Anupam Verma3-Jul-07 20:07 Anupam Verma 3-Jul-07 20:07
 Can it draw in a panel? Member #35766449-Feb-07 5:19 Member #3576644 9-Feb-07 5:19
 drawing a vertical bar chart in Web Application M.Ramesh19-Jul-06 5:28 M.Ramesh 19-Jul-06 5:28
 I have a problem with the first line tutananthanh27-Jan-05 20:20 tutananthanh 27-Jan-05 20:20
 just another point maker... geeeeeee anonymous18-Jun-04 9:09 anonymous 18-Jun-04 9:09
 Picture not visible Anonymous18-Jun-04 4:16 Anonymous 18-Jun-04 4:16
 Re: Picture not visible Karthikeyan Muthurajan20-Jun-04 19:08 Karthikeyan Muthurajan 20-Jun-04 19:08
 Last Visit: 31-Dec-99 18:00     Last Update: 24-May-17 18:20 Refresh 1