How to control chart's legend behavior?

TeeChart for ActiveX, COM and ASP
Post Reply
wss
Newbie
Newbie
Posts: 3
Joined: Tue May 26, 2009 12:00 am
Location: Sophia Antipolis, France

How to control chart's legend behavior?

Post by wss » Wed Aug 12, 2009 3:53 pm

Hi,

If I understand correctly, legend behavior is controlled through its LegendStyle property. By default it is set to lsAuto, which makes it behave differently when there is a single data series and multiple data series.

As expected, when there are multiple data series, the legend uses lsSeries style and displays each series' title (or name if title is not set).

When there is a single data series, the legend uses lsValues style and displays points/values from the data series.

What I would like to display in case of a single data series is not points/values but their corresponding axis labels. (I'm setting these labels myself, for each point/value.) Is there a way to do that?

So far I have tried to access Legendtems collection and manually override each item text (calling item's SetText method) but that did not work (I get an empty legend).

Btw, I'm manipulating the chart externally and I can't use the callbacks such as OnGetLegendText mentioned in a few places in this forum.

Thanks in advance for help!

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

Re: How to control chart's legend behavior?

Post by Yeray » Thu Aug 13, 2009 9:37 am

Hi wss,

Yes, that works as you understood. Only one consideration: note that the axis labels work in a similar way than the legend; you can also change the axis labels style to show the series labels or the series values.

And also note the legend's TextStyle property (that applies with LegendStyle lsLastValues and lsValues) and can take the values: ltsLeftPercent, ltsLeftValue, ltsPercent, ltsPlain, ltsRightPercent, ltsRightValue, ltsValue, ltsXAndPercent, ltsXAndValue and ltsXValue.

Look at this simple example:

Code: Select all

Private Sub Form_Load()
  TChart1.AddSeries scBar
  
  Dim i As Integer
  For i = 0 To 5
    TChart1.Series(0).Add Rnd * 100, "Point Number" & Str$(i + 1), clTeeColor 'adding points with labels
  Next i
  
  TChart1.Series(0).PointLabel(4) = "custom string" 'changing an individual point label
  
  TChart1.Legend.LegendStyle = lsValues
  TChart1.Legend.TextStyle = ltsPlain
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

wss
Newbie
Newbie
Posts: 3
Joined: Tue May 26, 2009 12:00 am
Location: Sophia Antipolis, France

Re: How to control chart's legend behavior?

Post by wss » Thu Aug 13, 2009 12:54 pm

Thank you for the prompt answer!

Here's what I have done after I read your response:

1. Stopped explicitly seting labels for the (bottom) axis
2. Set the point label for each point that I add to the series
3. Set the legend's TextStyle to ltsPlain. (In this particular scenario I have only one data series so I did not bother setting LegendStyle, knowing it will default to lsValues.)

As a result, I do get point labels shown in the legend instead of point values, which is what I wanted. Unfortunately, now the point values themselves are not shown anywhere in the chart.

What would be the way to have values displayed in the chart, labels displayed on the (bottom) axis, and again labels (not values) displayed in the legend?

Thanks!

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

Re: How to control chart's legend behavior?

Post by Yeray » Thu Aug 13, 2009 1:19 pm

Hi wss,

I think that the problem is still to set correctly the style of the different parts: Legend labels, Axis labels and Series marks. If I understood well, that could be an example of how you could do it:

Code: Select all

Private Sub Form_Load()
  TChart1.AddSeries scBar
 
  Dim i As Integer
  For i = 0 To 5
    TChart1.Series(0).Add Rnd * 100, "Point Number" & Str$(i + 1), clTeeColor 'adding points with labels
  Next i
 
  TChart1.Series(0).PointLabel(4) = "custom string" 'changing an individual point label
 
  TChart1.Legend.LegendStyle = lsValues
  TChart1.Legend.TextStyle = ltsPlain
  
  TChart1.Axis.Bottom.Labels.Style = talText
  TChart1.Series(0).Marks.Style = smsValue
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

wss
Newbie
Newbie
Posts: 3
Joined: Tue May 26, 2009 12:00 am
Location: Sophia Antipolis, France

Re: How to control chart's legend behavior?

Post by wss » Thu Aug 13, 2009 1:47 pm

Yeray wrote:I think that the problem is still to set correctly the style of the different parts: Legend labels, Axis labels and Series marks.

Code: Select all

TChart1.Series(0).Marks.Style = smsValue
This was the last remaining piece of the puzzle. Now I have values in the chart, and their corresponding labels in the legend.

Thank you for your time (and informative responses)!

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

Re: How to control chart's legend behavior?

Post by Yeray » Thu Aug 13, 2009 1:58 pm

Hi wss,

You're welcome!
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

Post Reply