Labels in between points in line chart

TeeChart for ActiveX, COM and ASP
Post Reply
CS
Newbie
Newbie
Posts: 22
Joined: Sat Jun 08, 2002 4:00 am

Labels in between points in line chart

Post by CS » Mon Apr 26, 2010 7:37 am

I need to get two things in my Line graph. Attached is a sample to show what I am looking for.

1. Is it possible to have label in between the points? In my eg:- lables like "AAA","BBB" etc.
2. To have labels in my X-axis (I need to put text as labels). In my eg: - "Start","Point1","Point2" etc.

If I add using Chart.Series(0).Add 20, "AAA", RGB(0, 64, 128) Then "AAA" comes near the point.

I was able to do the 2nd requirement using .Axis.Bottom.labels.Style = talMark.
I need a combination of points 1 and 2.
Can you tell me what settings I need to do to set this.

Any help on this will be really helpfull.

Thanks
CS
Attachments
DifferentLabelsInAxis.JPG
This is what I am looking for.
DifferentLabelsInAxis.JPG (24.9 KiB) Viewed 14359 times

Yeray
Site Admin
Site Admin
Posts: 9602
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Re: Labels in between points in line chart

Post by Yeray » Mon Apr 26, 2010 8:23 am

Hi CS,

You could use the points labels for the bottom axis labels (Start, Point 1,...) and annotation tools (or custom drawing techniques) for the labels between the points (AAA, BBB,...). For example:

Code: Select all

Private Sub Form_Load()
  TChart1.Aspect.View3D = False
  
  TChart1.AddSeries scLine
  TChart1.Series(0).asLine.Pointer.Visible = True
  
  Dim i As Integer
  TChart1.Series(0).Add Rnd * 100, "Open", clTeeColor
  For i = 1 To 3
    TChart1.Series(0).Add TChart1.Series(0).YValues.Value(i - 1) + Rnd * 10 - 5, "Point " + Str$(i), clTeeColor
  Next i
  TChart1.Series(0).Add TChart1.Series(0).YValues.Value(i - 1) + Rnd * 10 - 5, "Close", clTeeColor
  
  TChart1.Environment.InternalRepaint
  
  For i = 0 To TChart1.Series(0).Count - 2
    TChart1.Tools.Add tcAnnotate
    With TChart1.Tools.Items(i).asAnnotation
      .Text = Chr(65 + i) + Chr(65 + i) + Chr(65 + i)
      .Left = ((TChart1.Series(0).CalcXPos(i + 1) - TChart1.Series(0).CalcXPos(i)) / 2) + TChart1.Series(0).CalcXPos(i) - (TChart1.Canvas.TextWidth(.Text) / 2)
      .Top = ((TChart1.Series(0).CalcYPos(i + 1) - TChart1.Series(0).CalcYPos(i)) / 2) + TChart1.Series(0).CalcYPos(i) - (TChart1.Canvas.TextHeight(.Text) / 2)
      .Shape.Transparent = True
    End With
  Next i
End Sub
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

CS
Newbie
Newbie
Posts: 22
Joined: Sat Jun 08, 2002 4:00 am

Re: Labels in between points in line chart

Post by CS » Tue Apr 27, 2010 3:05 am

Hi Yeray,

In my version I am not getting ".Left " and ".Top " With TChart1.Tools.Items(i).asAnnotation

Various property I can see are ".Position", ".Text", ".Shape". Is there any other way to set the position.
Thanks
CS

Yeray
Site Admin
Site Admin
Posts: 9602
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Re: Labels in between points in line chart

Post by Yeray » Tue Apr 27, 2010 8:35 am

Hi CS,

What TeeChart version are you using? Here is works with both v7 and v8.
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

CS
Newbie
Newbie
Posts: 22
Joined: Sat Jun 08, 2002 4:00 am

Re: Labels in between points in line chart

Post by CS » Wed Apr 28, 2010 5:59 am

Hi Yeray,

version 5.

used "TeeChart5Activex.exe" for installation. We are calling the tchart componets from VB 6.

Thanks
CS

Yeray
Site Admin
Site Admin
Posts: 9602
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Re: Labels in between points in line chart

Post by Yeray » Thu Apr 29, 2010 9:51 am

Hi CS,

In TeeChart v5 you can do it with .asAnnotation.Shape.Left and .asAnnotation.Shape.Top instead of .asAnnotation.Left and .asAnnotation.Top.
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

CS
Newbie
Newbie
Posts: 22
Joined: Sat Jun 08, 2002 4:00 am

Re: Labels in between points in line chart

Post by CS » Thu Sep 30, 2010 10:36 am

Hi,

With the Code you provided I can plot the text in between the points.

Can I cange the Font of the Text which I am plotting.

Also I want to draw a rectangle or square around this label and need an ability to set the color of the Border.

Thanks CS

Yeray
Site Admin
Site Admin
Posts: 9602
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Re: Labels in between points in line chart

Post by Yeray » Thu Sep 30, 2010 3:04 pm

Hi CS,

In the example above, with annotation tools, you can set their font and other settings, for example, as follows:

Code: Select all

  For i = 0 To TChart1.Series(0).Count - 2
    TChart1.Tools.Add tcAnnotate
    With TChart1.Tools.Items(i).asAnnotation
      .Text = Chr(65 + i) + Chr(65 + i) + Chr(65 + i)
      .Left = ((TChart1.Series(0).CalcXPos(i + 1) - TChart1.Series(0).CalcXPos(i)) / 2) + TChart1.Series(0).CalcXPos(i) - (TChart1.Canvas.TextWidth(.Text) / 2)
      .Top = ((TChart1.Series(0).CalcYPos(i + 1) - TChart1.Series(0).CalcYPos(i)) / 2) + TChart1.Series(0).CalcYPos(i) - (TChart1.Canvas.TextHeight(.Text) / 2)
      .Shape.Shadow.Visible = False
      
      If (i = 2) Then
        .Shape.Font.Color = vbRed
        .Shape.Font.Size = 12
        .Shape.Font.Bold = True
        .Shape.Font.Name = "Comic Sans MS"
      End If
    End With
  Next i
However, the following property in VCL seems not to be implemented in ActiveX. I've adde it to the wish list to be implemented in future releases (TA05015185):

Code: Select all

ChartTool1.Shape.Brush.Style:=bsClear;
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

CS
Newbie
Newbie
Posts: 22
Joined: Sat Jun 08, 2002 4:00 am

Re: Labels in between points in line chart

Post by CS » Fri Oct 29, 2010 6:29 am

I tried to use Annotation but I am not able to plot Annotation in the middle of the points.
It works fine when I run the cod eand view the output but when I Export that image to jpeg the points are not on the same Location.
Also I have attached both the screenshot.
Following is Code whcih I am using for Graph generation :

Private Sub Command1_Click()
With TChart1.Export.asGIF
.Width = 850
.Height = 300
.SaveToFile ("C:\Test.gif")
End With
End Sub

Private Sub Form_Load()
TChart1.ClearChart
With TChart1
.AddSeries (scLine)
.Series(0).Clear
'.Series(0).Marks.Visible = True
.Panel.Color = vbWhite
.Panel.BevelOuter = bvNone
.Panel.Gradient.Visible = False

.Header.Text.Clear
'.Header.Text.Add m_sHeader
.Header.Font.Color = vbRed
.Header.Font.Bold = False
.Header.Font.Name = "Verdana"
.Header.Font.Size = 8

.Tools.Clear
.Footer.Text.Clear
.Footer.Text.Add m_sFooter
.Legend.Visible = False
.Legend.TextStyle = ltsLeftValue
.Legend.Font.Color = vbBlack
.Legend.Font.Name = "Verdana"
.Legend.Font.Size = 8
.Legend.ShapeStyle = fosRoundRectangle
.Legend.ShadowSize = 0

.Walls.Visible = False
.Aspect.View3D = False

.Axis.Left.Title.Caption = "Bps from Arrival Price"
.Axis.Left.Title.Font.Bold = True
.Axis.Left.Title.Font.Name = "Verdana"
.Axis.Left.Title.Font.Size = 10
.Axis.Left.Title.Font.Color = vbBlack

.Axis.Left.AxisPen.Color = RGB(51, 51, 51)
.Axis.Left.labels.Font.Color = vbBlack
.Axis.Left.labels.Font.Name = "Verdana"
.Axis.Left.labels.Font.Size = 8
.Axis.Left.labels.Font.Bold = False
.Axis.Left.GridPen.Visible = False

.Axis.Bottom.AxisPen.Color = RGB(77, 77, 77)
.Axis.Bottom.labels.Font.Name = "Verdana"
.Axis.Bottom.labels.Font.Size = 8
.Axis.Bottom.labels.Font.Color = vbWhite
.Axis.Bottom.labels.OnAxis = False
.Axis.Bottom.Title.Caption = m_sXAxisTitle
.Axis.Bottom.Title.Font.Bold = False
.Axis.Bottom.Title.Font.Color = vbBlack
.Axis.Bottom.GridPen.Visible = True
.Axis.Bottom.GridPen.Style = psSolid
.Axis.Bottom.GridPen.Color = RGB(143, 143, 143)

.Axis.Right.Visible = True
.Axis.Right.AxisPen.Color = RGB(77, 77, 77)
.Axis.Right.labels.Font.Name = "Verdana"
.Axis.Right.labels.Font.Size = 8
.Axis.Right.Title.Caption = m_sXAxisTitle
.Axis.Right.Title.Font.Bold = False
.Axis.Right.Title.Font.Color = vbBlack
.Axis.Right.GridPen.Visible = False

.Axis.Top.Visible = False
.Axis.Top.AxisPen.Color = RGB(77, 77, 77)
.Axis.Top.labels.Visible = False
End With



'TChart1.Aspect.View3D = False
'TChart1.ClearChart
TChart1.AddSeries scLine
TChart1.Series(0).asLine.Pointer.Visible = True

m_lMinLeftAxis = 0
m_lMaxLeftAxis = 0
Dim Point1, Point2, Point3, Point4, Point4TPlusOne, Point4TPlusFive
Dim zeroCorrectingFigure, tmpNumber
tmpNumber = 0
zeroCorrectingFigure = 0
With TChart1
Dim points, labels, i, calcMethodType, CalcCol
.Series(0).asLine.LinePen.Width = 1
.Series(0).asLine.LinePen.Style = psSolid
.Series(0).asLine.LinePen.EndStyle = esFlat
.Axis.Bottom.labels.Visible = True
.Axis.Bottom.labels.Font.Name = "Arial"
.Axis.Bottom.labels.Font.Size = 8
.Axis.Bottom.labels.OnAxis = True
.Axis.Bottom.labels.Font.Color = vbBlack
.Axis.Bottom.labels.Style = talText
.Axis.Bottom.MinorTicks.Visible = False
Point1 = -81.11
Point2 = -90.45
Point3 = 23.9
Point4 = 57.87
Point4TPlusOne = 22.88
Point4TPlusFive = -15.23

.Series(0).Add Round(Point1, 2), "P1", RGB(0, 64, 128)
If m_lMinLeftAxis > Point1 Then m_lMinLeftAxis = Point1
If m_lMaxLeftAxis < Point1 Then m_lMaxLeftAxis = Point1
m_lMaxBottomAxis = m_lMaxBottomAxis + 1

.Series(0).Add Round(Point2, 2), "P2", RGB(0, 64, 128)
If m_lMinLeftAxis > Point2 Then m_lMinLeftAxis = Point2
If m_lMaxLeftAxis < Point2 Then m_lMaxLeftAxis = Point2
m_lMaxBottomAxis = m_lMaxBottomAxis + 1

.Series(0).Add 0, "P3", RGB(0, 64, 128)
m_lMaxBottomAxis = m_lMaxBottomAxis + 1

.Series(0).Add Round(Point3, 2), "P4", RGB(0, 64, 128)
If m_lMinLeftAxis > Point3 Then m_lMinLeftAxis = Point3
If m_lMaxLeftAxis < Point3 Then m_lMaxLeftAxis = Point3
m_lMaxBottomAxis = m_lMaxBottomAxis + 1

.Series(0).Add Round(Point4, 2), "P5", RGB(0, 64, 128)
If m_lMinLeftAxis > Point4 Then m_lMinLeftAxis = Point4
If m_lMaxLeftAxis < Point4 Then m_lMaxLeftAxis = Point4
m_lMaxBottomAxis = m_lMaxBottomAxis + 1

.Series(0).Add Round(Point4TPlusOne, 2), "P6", RGB(0, 64, 128)
If m_lMinLeftAxis > Point4TPlusOne Then m_lMinLeftAxis = Point4TPlusOne
If m_lMaxLeftAxis < Point4TPlusOne Then m_lMaxLeftAxis = Point4TPlusOne
m_lMaxBottomAxis = m_lMaxBottomAxis + 1

.Series(0).Add Round(Point4TPlusFive, 2), "P7", RGB(0, 64, 128)
If m_lMinLeftAxis > Point4TPlusFive Then m_lMinLeftAxis = Point4TPlusFive
If m_lMaxLeftAxis < Point4TPlusFive Then m_lMaxLeftAxis = Point4TPlusFive
m_lMaxBottomAxis = m_lMaxBottomAxis + 1


.Series(0).VerticalAxis = aBothVertAxis
.Series(0).asLine.Pointer.Visible = True
.Series(0).asLine.Pointer.Style = psCircle

With .Axis.Left
.SetMinMax m_lMinLeftAxis, m_lMaxLeftAxis + 20
If (((m_lMaxLeftAxis + 20) - (m_lMinLeftAxis - 5)) / 6) > 0 Then
.Increment = Int(((m_lMaxLeftAxis + 20) - (m_lMinLeftAxis - 5)) / 6)
End If
End With
With .Axis.Bottom
.labels.Visible = True
.labels.OnAxis = True
.SetMinMax 0, m_lMaxBottomAxis
End With
With .Axis.Right
.SetMinMax m_lMinLeftAxis, m_lMaxLeftAxis + 20
If (((m_lMaxLeftAxis + 20) - (m_lMinLeftAxis - 5)) / 6) > 0 Then
.Increment = Int(((m_lMaxLeftAxis + 20) - (m_lMinLeftAxis - 5)) / 6)
End If
End With







End With

TChart1.Environment.InternalRepaint

For i = 0 To TChart1.Series(0).Count - 2
TChart1.Tools.Add tcAnnotate
With TChart1.Tools.Items(i).asAnnotation
.Text = "Test"
.Shape.Left = ((TChart1.Series(0).CalcXPos(i + 1) - TChart1.Series(0).CalcXPos(i)) / 2) + TChart1.Series(0).CalcXPos(i) - (TChart1.Canvas.TextWidth(.Text) / 2)
.Shape.Top = ((TChart1.Series(0).CalcYPos(i + 1) - TChart1.Series(0).CalcYPos(i)) / 2) + TChart1.Series(0).CalcYPos(i) - (TChart1.Canvas.TextHeight(.Text) / 2)
.Shape.Transparent = False
End With
Next i
End Sub
LineGraphExport.gif
LineGraphExport.gif (22.39 KiB) Viewed 14157 times
LineGraph.JPG
LineGraph.JPG (28.38 KiB) Viewed 14176 times

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Re: Labels in between points in line chart

Post by Narcís » Tue Nov 02, 2010 8:57 am

Hi CS,

You could try exporting the chart to an image using TChart1.Canvas.StretchDraw method.
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

CS
Newbie
Newbie
Posts: 22
Joined: Sat Jun 08, 2002 4:00 am

Re: Labels in between points in line chart

Post by CS » Thu Nov 11, 2010 3:59 am

Hi,

I am using TChart Version 5 in Visual Basis.
I can't find StretchDraw Method in this version.

Can you give me some other solution to fix this.

CS

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Re: Labels in between points in line chart

Post by Narcís » Fri Nov 12, 2010 8:47 am

Hi CS,

StretchDraw is available in v2010 (aka v9). Many new features and enhancements have been added since v5 was released. We strongly recommend you to have a look at v2010's fully functional evaluation version available at http://www.steema.com/evaluation/ax.

An alternative to StretchDraw, which can be done in v5 too is positioning object in the OnBeforeDrawSeries event. Doing so exports tools correctly. You should remove the code where you add tools and do something like this:

Code: Select all

Private Sub TChart1_OnBeforeDrawSeries()
TChart1.Tools.Clear
For i = 0 To TChart1.Series(0).Count - 2
TChart1.Tools.Add tcAnnotate
With TChart1.Tools.Items(i).asAnnotation
.Text = "Test"
.Shape.CustomPosition = True
.Shape.Left = ((TChart1.Series(0).CalcXPos(i + 1) - TChart1.Series(0).CalcXPos(i)) / 2) + TChart1.Series(0).CalcXPos(i) - (TChart1.Canvas.TextWidth(.Text) / 2)
.Shape.Top = ((TChart1.Series(0).CalcYPos(i + 1) - TChart1.Series(0).CalcYPos(i)) / 2) + TChart1.Series(0).CalcYPos(i) - (TChart1.Canvas.TextHeight(.Text) / 2)
.Shape.Transparent = False
End With
Next i
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Post Reply