Page 1 of 1

Stack graph plotting

Posted: Tue May 29, 2007 3:35 pm
by 9524108
i have posted the tee file as well as the excel file for the sam data

in tchart , left axis maximum show above 100
where as excel shows exact 100 ..

when i am having negative values in the data , tchart axis adds the negative value ,( when you compare the graph ,you can easily understand the point)


graph used is stacked bar

advise need on handling negative values

Posted: Wed May 30, 2007 8:56 am
by yeray
Hi daryl,

We've taken a look at your data at both excel's chart and teechart's chart and we consider that Teechart is fairer to original data. Because when you add a negative value, excel subtracts the negative value from one of the positives values you added but who controls from which? We consider this as data inconsistency.

For example if your values represent the percent of benefit/deficit of an operation with each company, from which company's benefit is going to be substracted the deficit from Epson?

That's why teechart accumulates positive values over 0 and negative under 0. So, if you look at your data and sum the positive values you'll see both stacked bars sum more than 100.

In any case, if you wish to have a mark indicating the result benefit, we suggest you to use an Add function.

Posted: Wed May 30, 2007 9:11 am
by 9524108
Is there i can replicate the exact the excel concept in tee chart for this kind of negatives

Posted: Thu May 31, 2007 9:47 am
by yeray
Hi Daryl,

You can do it manually by looking for the negative values and subtracting them from another positive value/s. So you have to decide from which value/s are you going to subtract the negative value and check that the positive value/s is/are greater than the negative.
In the following example we've entered the values manually to show you a simple example of how you can subtract the negative value from the following value.

Code: Select all

Private Sub Command1_Click()
Dim i, j As Integer

  For i = 0 To TChart1.SeriesCount - 1
    For j = 0 To 1
      If TChart1.Series(i).YValues.Value(j) < 0 Then
        If (TChart1.Series((i + 1) Mod TChart1.SeriesCount).YValues.Value(j) + TChart1.Series(i).YValues.Value(j)) > 0 Then
          TChart1.Series((i + 1) Mod TChart1.SeriesCount).YValues.Value(j) = TChart1.Series((i + 1) Mod TChart1.SeriesCount).YValues.Value(j) + TChart1.Series(i).YValues.Value(j)
          TChart1.Series(i).YValues.Value(j) = 0
        End If
      End If
    Next j
  Next i
End Sub

Private Sub Form_Load()
Dim i As Integer
  TChart1.Aspect.View3D = False

  For i = 0 To 6
    TChart1.AddSeries scBar
    TChart1.Series(i).Marks.Visible = False
  Next i
  
  TChart1.Series(0).asBar.MultiBar = mbStacked
  
  TChart1.Series(0).Add -10, "", vbRed
  TChart1.Series(0).Add 25, "", vbRed

  TChart1.Series(1).Add 30, "", vbBlue
  TChart1.Series(1).Add -10, "", vbBlue

  TChart1.Series(2).Add 25, "", vbGreen
  TChart1.Series(2).Add 20, "", vbGreen

  TChart1.Series(3).Add -10, "", vbYellow
  TChart1.Series(3).Add 25, "", vbYellow

  TChart1.Series(4).Add 25, "", vbGrayText
  TChart1.Series(4).Add -5, "", vbGrayText

  TChart1.Series(5).Add 20, "", vbWhite
  TChart1.Series(5).Add 25, "", vbWhite

  TChart1.Series(6).Add 20, "", vbBlack
  TChart1.Series(6).Add 20, "", vbBlack
  
  Caption = Str$(TChart1.Series(0).YValues.Value(0))
End Sub