0

Am using Zedgraph chart library but I can't seem to be able to color a bar graph depending on a specific condition. Am following along with the example found on this tutorial.

In my case, if the value isn't above 50 -which is the student.pass_mark variable-, I want to color the bar red and if its above 50 I want to color it green. Below is my code. Which so far only gives me red even though I have values of 100, 80, 110 etc.

Dim subject As String
Dim grade As Decimal
Dim colors As Color() = {}
Dim subject_names As String() = {}
For i = 0 To student.no_of_subjects
    ReDim Preserve colors(i)
    ReDim Preserve subject_names(i)
    subject = student.subject_name
    grade = student.grade
    Dim x As Double = CDbl(i) + 1
    Dim y As Double = grade
    Dim z As Double = 0
    list.Add(x, y, z)
    If grade < student.pass_mark Then
        colors(i) = Color.Red
    Else
        colors(i) = Color.Green
    End If
    subject_names(i) = subject
Next

Dim myCurve As BarItem = myPane.AddBar("Student Subject", list, Color.Blue)
'Dim colors As Color() = {Color.Red, Color.Yellow, Color.Green, Color.Blue, Color.Purple}
myCurve.Bar.Fill = New Fill(colors)
myCurve.Bar.Fill.Type = FillType.Solid

myCurve.Bar.Fill.RangeMin = 0
myCurve.Bar.Fill.RangeMax = 4

myPane.Chart.Fill = New Fill(Color.White, Color.FromArgb(220, 220, 255), 45)
myPane.Fill = New Fill(Color.White, Color.FromArgb(255, 255, 225), 45)
' Tell ZedGraph to calculate the axis ranges
' Set the XAxis labels
myPane.XAxis.Scale.TextLabels = subject_names

' Set the XAxis to Text type
myPane.XAxis.Type = ZedGraph.AxisType.Text
ZedChart.IsShowPointValues = True
ZedChart.AxisChange()
ZedChart.Refresh()

Also, I want to draw a line across the whole chart that shows the pass_mark so that it is quickly visible that a student' has or hasn't passed a certain subject in comparison to the passmark

lukik
  • 3,919
  • 6
  • 46
  • 89

1 Answers1

0

I don't know whether it is still relative but you can do multi-colored bar plots in ZedGraph. You can find the tutorial here: http://zedgraph.dariowiz.com/indexb806.html?title=Multi-Colored_Bar_Demo

In your case you can use FillType.GradientByColorValue I assume. For the line you can simply add a LineObj to the myPane.GraphObjList

Oliver Bernhardt
  • 399
  • 1
  • 4
  • 18