Hi,
I am trying to add error bars to bar graphs presenting minimum and maximum. I understand that the upper and lower errorbar are always in equal size, and that makes sense charting errors. The distance between mean to minimum, and between mean and maximum are not always equal, in most cases unequal. So I declare two errorbars, upper and lower to chart maximum and minimum respectively. Unfortunetely, the two errorbars are displayed offset from each other. Is there a way to bring both in line?
Cheers
Oli
Here my code:
Dim ErrorbarMin As New Steema.TeeChart.Styles.Error()
Dim ErrorbarMax As New Steema.TeeChart.Styles.Error()
ErrorbarMax.Add(i, GraphData_Mean(i), GraphData_Max(i) - GraphData_Mean(i), labels(i))
ErrorbarMin.Add(i, GraphData_Mean(i), GraphData_Mean(i) - GraphData_Min(i), labels(i))
ErrorbarMax.Color = Color.Black
ErrorbarMax.HorizAxis = HorizontalAxis.Bottom
ErrorbarMax.ErrorPen.Visible = True
ErrorbarMax.ErrorPen.Width = 2
ErrorbarMax.ErrorPen.Color = Color.Black
ErrorbarMax.ErrorPen.Style = Drawing2D.DashStyle.Solid
ErrorbarMax.ErrorWidthUnits = ErrorWidthUnits.Percent
ErrorbarMax.ErrorWidth = 65
ErrorbarMax.ErrorStyle = ErrorStyles.Top
ErrorbarMax.Title = "Error bar, upper"
ErrorbarMin.Color = Color.Black
ErrorbarMin.HorizAxis = HorizontalAxis.Bottom
ErrorbarMin.ErrorPen.Visible = True
ErrorbarMin.ErrorPen.Width = 2
ErrorbarMin.ErrorPen.Color = Color.Black
ErrorbarMin.ErrorPen.Style = Drawing2D.DashStyle.Solid
ErrorbarMin.ErrorWidthUnits = ErrorWidthUnits.Percent
ErrorbarMin.ErrorWidth = 65
ErrorbarMin.ErrorStyle = ErrorStyles.Bottom
ErrorbarMin.Title = "Error bar, lower"
tChart.Series.Add(ErrorbarMax)
tChart.Series.Add(ErrorbarMin)
ErrorBar with min and max values
Re: ErrorBar with min and max values
Hello Oli,
Can you please, send us a complete example where we can help you to achieve as you want?
Thanks,
Can you please, send us a complete example where we can help you to achieve as you want?
Thanks,
Best Regards,
Sandra Pazos / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |
Re: ErrorBar with min and max values
Hi Sandra,
I have attached a small example project to demonstrate the offset of two errorbars added to one bar. I would like to have the two errorbars aligned.
I am also wondering why the font size of labels in bottom and left axis is different, although I set both to a size of 11.
Please let me know if you require further details on what I am trying to achieve. Thanks for your support
Cheers
Oli
I have attached a small example project to demonstrate the offset of two errorbars added to one bar. I would like to have the two errorbars aligned.
I am also wondering why the font size of labels in bottom and left axis is different, although I set both to a size of 11.
Please let me know if you require further details on what I am trying to achieve. Thanks for your support
Cheers
Oli
- Attachments
-
- MinMaxErrorBar.zip
- (77.7 KiB) Downloaded 501 times
Re: ErrorBar with min and max values
Hello Oli,
Ok. I have made a simple code using a ErrorBar Series and Error Series where the errorbars are displayed in line
Can you tell us if previous code works as you want?
Thanks,
Ok. I have made a simple code using a ErrorBar Series and Error Series where the errorbars are displayed in line
Code: Select all
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Initialize chart
InitializeChart()
Dim GraphXAxisTitle(2) As String
GraphXAxisTitle = New String() {"A", "B", "C"}
Dim GraphData(4, 2) As Double
GraphData = New Double(,) {{1, 2, 3, 4, 5}, {8, 9, 11, 12, 15}, {22, 19, 21, 23, 17}}
Dim GraphData_Mean(2) As Double
GraphData_Mean(0) = 3
GraphData_Mean(1) = 11
GraphData_Mean(2) = 34
Dim GraphData_Max(2) As Double
GraphData_Max(0) = 5
GraphData_Max(1) = 15
GraphData_Max(2) = 23
Dim GraphData_Min(2) As Double
GraphData_Min(0) = 1
GraphData_Min(1) = 8
GraphData_Min(2) = 17
' Clearing and Setting tchart1 properties
tChart.Series.Clear()
tChart.Axes.Bottom.Labels.Items.Clear()
' The labels for vertical axis
Dim Ylabel(0) As String
Ylabel(0) = "Y Title"
tChart.Axes.Left.Title.Lines = Ylabel
tChart.Axes.Left.Title.Text = Ylabel(0)
tChart.Axes.Left.Title.Visible = True
' The labels for the chart
Dim labels(GraphXAxisTitle.Length - 1) As String
For i = 0 To GraphXAxisTitle.Length - 1
labels(i) = GraphXAxisTitle(i)
Next
' Set titles of graph
tChart.Header.Text = "MinMax ErrorBar"
tChart.Header.Visible = True
tChart.Legend.Visible = False
' Set Axes
tChart.Axes.Left.MinorTickCount = 0
tChart.Axes.Left.Automatic = True
tChart.Axes.Left.Labels.Font.Size = 11
tChart.Axes.Bottom.MinorTickCount = 0
tChart.Axes.Bottom.Automatic = True
tChart.Axes.Bottom.Labels.Font.Size = 11
tChart.Axes.Bottom.MinimumOffset = 50
tChart.Axes.Bottom.MaximumOffset = 50
tChart.Axes.Left.MinimumOffset = 0
tChart.Axes.Top.Automatic = True
tChart.Axes.Top.Visible = False
tChart.Axes.Top.MinimumOffset = 50
tChart.Axes.Top.MaximumOffset = 50
For i = 0 To 2
Dim errorBar As New Steema.TeeChart.Styles.ErrorBar(tChart.Chart)
Dim error1 As New Steema.TeeChart.Styles.Error(tChart.Chart)
'Error Bar Series
errorBar.Pen.Color = Color.Black
errorBar.ErrorPen.Width = 2
errorBar.Brush.Solid = True
errorBar.Brush.Color = Color.White
errorBar.Title = labels(i)
errorBar.Marks.Visible = False
errorBar.ErrorStyle = ErrorStyles.Top
errorBar.HorizAxis = HorizontalAxis.Bottom
errorBar.MultiBar = MultiBars.None
errorBar.Add(i, GraphData_Mean(i), GraphData_Max(i) - GraphData_Mean(i), labels(i))
errorBar.BarWidthPercent = 40
tChart.Axes.Bottom.Labels.Items.Add(i, errorBar.Title)
' Error Series
error1.ErrorPen.Width = 2
error1.Brush.Solid = True
error1.Color = Color.Black
error1.Marks.Visible = False
error1.Title = labels(i)
error1.ErrorStyle = ErrorStyles.Bottom
error1.HorizAxis = HorizontalAxis.Top
error1.MultiBar = MultiBars.None
error1.ShowInLegend = False
error1.Add(i, GraphData_Mean(i), GraphData_Mean(i) - GraphData_Min(i), labels(i))
error1.BarWidthPercent = 40
Next
tChart.Chart.Tag = "MeanBarError"
Me.Controls.Add(tChart)
End Sub
Thanks,
Best Regards,
Sandra Pazos / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |
Re: ErrorBar with min and max values
Hi Sandra,
your code works as long as I am using bar charts. Another type of charts I do in my application is a simple line with errorbars. I create the line with box plot, and set the box and whisker invisible, and the meanline to visible. Then I add two errorss, one for minimum and the other for maximum value. See attachment.
Is the behavior to offsetting the errors expected, or a bug which could be fixed in the near future?
And in your code, the font size of left and bottom axis seems to be different too, even so both are set to a size of 11. Any idea why?
Thanks again
Oli
your code works as long as I am using bar charts. Another type of charts I do in my application is a simple line with errorbars. I create the line with box plot, and set the box and whisker invisible, and the meanline to visible. Then I add two errorss, one for minimum and the other for maximum value. See attachment.
Is the behavior to offsetting the errors expected, or a bug which could be fixed in the near future?
And in your code, the font size of left and bottom axis seems to be different too, even so both are set to a size of 11. Any idea why?
Thanks again
Oli
- Attachments
-
- LineChartwithMinMax.PNG (13.73 KiB) Viewed 10105 times
Re: ErrorBar with min and max values
Hello Oli,
I suggest do something as next code to achieve as you want:
I hope will helps.
Thanks,
I suggest do something as next code to achieve as you want:
Code: Select all
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
InitializeChart()
' Add any initialization after the InitializeComponent() call.
End Sub
Private boxSeries1 As Steema.TeeChart.Styles.Box, boxSeries2 As Steema.TeeChart.Styles.Box, boxSeries3 As Steema.TeeChart.Styles.Box
Private error1 As Steema.TeeChart.Styles.Error, error2 As Steema.TeeChart.Styles.Error
Private Sub InitializeChart()
TChart1.Aspect.View3D = False
TChart1.Panel.MarginBottom = 10
boxSeries1 = New Box(TChart1.Chart)
boxSeries2 = New Box(TChart1.Chart)
boxSeries3 = New Box(TChart1.Chart)
error1 = New [Error](TChart1.Chart)
error2 = New [Error](TChart1.Chart)
'BoxSeries1
boxSeries1.Add(New Double(5) {321, 625, 810, 150, 190, 210})
boxSeries1.Position = 0
CustomizeBoxSeries(boxSeries1)
boxSeries1.Title = "A"
boxSeries2.Add(New Double(3) {256, 456, 120, 78})
boxSeries2.Position = 1
CustomizeBoxSeries(boxSeries2)
boxSeries2.Title = "B"
boxSeries3.Add(New Double(4) {306, 100, 201, 789, 861})
boxSeries3.Position = 2
CustomizeBoxSeries(boxSeries3)
boxSeries3.Title = "C"
'Error1
error1.Add(boxSeries1.Position, CalculateMedian(boxSeries1), 50)
error1.Add(boxSeries2.Position, CalculateMedian(boxSeries2), 30)
error1.Add(boxSeries3.Position, CalculateMedian(boxSeries3), 63)
error1.ErrorPen.Width = 2
error1.Color = Color.Black
error1.ErrorWidth = boxSeries1.Box.HorizSize / 2
error1.ErrorStyle = ErrorStyles.Top
error1.HorizAxis = HorizontalAxis.Top
error1.MultiBar = MultiBars.None
error1.ShowInLegend = False
'Error2
error2.Add(boxSeries1.Position, CalculateMedian(boxSeries1), -10)
error2.Add(boxSeries2.Position, CalculateMedian(boxSeries2), -50)
error2.Add(boxSeries3.Position, CalculateMedian(boxSeries3), -33)
error2.ErrorPen.Width = 2
error2.Color = Color.Black
error2.ErrorWidth = boxSeries1.Box.HorizSize / 2
error2.ErrorStyle = ErrorStyles.Bottom
error2.HorizAxis = HorizontalAxis.Bottom
error2.MultiBar = MultiBars.None
error2.ShowInLegend = False
'Axes
TChart1.Axes.Top.Visible = False
TChart1.Axes.Bottom.Labels.Items.Add(0, boxSeries1.Title)
TChart1.Axes.Bottom.Labels.Items.Add(1, boxSeries2.Title)
TChart1.Axes.Bottom.Labels.Items.Add(2, boxSeries3.Title)
TChart1.Axes.Bottom.Labels.Font.Size = 15
TChart1.Draw()
TChart1.Draw()
TChart1.Draw()
End Sub
Private Function CalculateMedian(ByVal series As Box) As Double
Dim median As Double
median = 0.0
Dim N As Integer = series.SampleValues.Count
If N > 0 Then
Dim InvN As Double = 1.0 / N
' calculate median
Dim med As Integer = N \ 2
If (N Mod 2) = 0 Then
median = 0.5 * (series.SampleValues(med - 1) + series.SampleValues(med))
Else
median = series.SampleValues(med)
End If
End If
Return median
End Function
Private Sub CustomizeBoxSeries(ByVal boxSeries As Box)
boxSeries.MedianPen.Color = Color.Black
boxSeries.MedianPen.Width = 2
boxSeries.MedianPen.Style = System.Drawing.Drawing2D.DashStyle.Solid
boxSeries.WhiskerPen.Visible = False
boxSeries.ExtrOut.Visible = False
boxSeries.MildOut.Visible = False
boxSeries.Box.HorizSize = 50
boxSeries.Box.Visible = False
End Sub
Sorry I forgot answer it. When the labels are custom you need change the size for each label as do in next lines of code:And in your code, the font size of left and bottom axis seems to be different too, even so both are set to a size of 11. Any idea why?
Code: Select all
tChart1.Axes.Bottom.Labels.Items(0).Font.Size = 11;
tChart1.Axes.Bottom.Labels.Items(1).Font.Size = 11;
tChart1.Axes.Bottom.Labels.Items(2).Font.Size = 11;
Thanks,
Best Regards,
Sandra Pazos / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |
Re: ErrorBar with min and max values
Thanks Sandra. Errorbar with minimum and maximum (unsymmetric errorbars) works fine now on bars and boxplots. Many thanks for your help.
Oli
Oli
Re: ErrorBar with min and max values
Hello Oli,
I am glad that my suggestion has been helpful for you.
Thanks,
I am glad that my suggestion has been helpful for you.
Thanks,
Best Regards,
Sandra Pazos / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |