Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2011-07

TAChart 2nd Y Axis

13 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

David M. Lawrence

Was the 2nd-Y axis patch (No. 13832;
http://bugs.freepascal.org/view.php?id=13832) ever incorporated into the Lazarus/TAChart release? I'm new to Lazarus and don't quite know how to interpret the bugtracker page. I do know that I cannot find some of the changes mentioned in the patches -- such as for TAGraph -- in the latest version of TAGraph.

I do scientific programming and am trying to update some of my older Delphi/Pascal programs. I need the ability to independently set YMax and YMin values for both Y axes on climate diagrams (which plot both monthly precipitation and temperature data) on the same chart. Precipitation data are plotted as bar graphs, temperature data are plotted by line series. I can get all the data series plotted, but I cannot get the precip and temp data scaled properly.

In the older version of my program (which used Delphi/Teechart), I had the precipitation axes set from 0 to 30 cm and the temperature axes set from -90 to 60 degrees centigrade.

If this list accepts attachments, I can forward a wmf with an actual chart. Here's the current version of the plotting procedure:

procedure TCLIMatePLOTForm.CLIMPLOTButtonClick(Sender: TObject);
var
   Mnth: integer;
begin
   ClimateDataChart.Title.Text.Clear;
   Series_mpr.Clear;
   LineSeries_mt.Clear;
   LineSeries_mxt.Clear;
   LineSeries_mnt.Clear;
   with ClimateDataChart.Title.Text do
     Add(SiteName);
   if lat < 0 then begin
     with LineSeries_mt do begin
       for Mnth := 7 to 12 do
         Add(mt[Mnth], AbMonth[Mnth], clPurple);
       for Mnth := 1 to 6 do
         Add(mt[Mnth], AbMonth[Mnth], clPurple);
     end;
     with LineSeries_mxt do begin
       for Mnth := 7 to 12 do
         Add(mxt[Mnth], AbMonth[Mnth], clRed);
       for Mnth := 1 to 6 do
         Add(mxt[Mnth], AbMonth[Mnth], clRed);
     end;
     with LineSeries_mnt do begin
       for Mnth := 7 to 12 do
         Add(mnt[Mnth], AbMonth[Mnth], clBlue);
       for Mnth := 1 to 6 do
         Add(mnt[Mnth], AbMonth[Mnth], clBlue);
     end;
     with Series_mpr do begin
       for Mnth := 7 to 12 do
         if PrecipData  1 then
           Add((mpr[Mnth]/10), AbMonth[Mnth], clAqua)
         else
           Add(0, AbMonth[Mnth], clAqua);
       for Mnth := 1 to 6 do
         if PrecipData  1 then
           Add((mpr[Mnth]/10), AbMonth[Mnth], clAqua)
         else
           Add(0, AbMonth[Mnth], clAqua);
     end;
   end else begin
       with LineSeries_mt do
         for Mnth := 1 to 12 do
           Add(mt[Mnth], AbMonth[Mnth], clPurple);
       with LineSeries_mxt do
         for Mnth := 1 to 12 do
           Add(mxt[Mnth], AbMonth[Mnth], clRed);
       with LineSeries_mnt do
         for Mnth := 1 to 12 do
           Add(mnt[Mnth], AbMonth[Mnth], clBlue);
     with Series_mpr do
       for Mnth := 1 to 12 do
         if PrecipData  1 then
           Add((mpr[Mnth]/10), AbMonth[Mnth], clAqua)
         else
           Add(0, AbMonth[Mnth], clAqua);
   end;
end;
Here's the form file: object CLIMatePLOTForm: TCLIMatePLOTForm Left = 881 Height = 535 Top = 152 Width = 345 Caption = 'CLIMatePLOT' ClientHeight = 515 ClientWidth = 345 Color = clSilver Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Menu = PlotMenu OnClose = FormClose OnCreate = FormCreate LCLVersion = '0.9.30' Visible = True object ClimateDataChart: TChart Left = 16 Height = 401 Top = 16 Width = 312 AllowZoom = False AxisList = < item Title.Clipped = False Title.LabelFont.Orientation = 900 Title.Visible = True Title.Caption = 'Average precipitation (cm)' end item Alignment = calBottom Title.Caption = 'Month' end item Alignment = calRight Title.LabelFont.Orientation = 900 Title.Visible = True Title.Caption = 'Average temperature (?C)' end> Extent.YMax = 30 Extent.UseYMin = True Extent.UseYMax = True Foot.Brush.Color = clBtnFace Foot.Font.Color = clBlue Legend.UseSidebar = False Title.Brush.Color = clBtnFace Title.Font.Color = clBlack Title.Font.Height = -11 Title.Font.Name = 'Arial' Title.Text.Strings = ( '' ) Title.Visible = True Color = clNone ParentColor = False object Series_mpr: TBarSeries Title = 'Precipitation' AxisIndexX = 1 AxisIndexY = 0 BarBrush.Color = clAqua UseReticule = True end object LineSeries_mt: TLineSeries Marks.Visible = False Title = 'Mean temperature' AxisIndexY = 2 LinePen.Color = clGreen LinePen.Width = 2 Pointer.Visible = False end object LineSeries_mxt: TLineSeries Marks.Visible = False Title = 'Maximum temperature' LinePen.Color = clRed LinePen.Width = 2 Pointer.Visible = False end object LineSeries_mnt: TLineSeries Marks.Visible = False Title = 'Minimum temperature' LinePen.Color = clBlue LinePen.Width = 2 Pointer.Visible = False end end object ExitChartButton: TButton Left = 184 Height = 33 Top = 432 Width = 137 Caption = 'Exit chart' OnClick = ExitChartButtonClick TabOrder = 1 end object CLIMPLOTButton: TButton Left = 24 Height = 33 Top = 432 Width = 137 Caption = 'Plot climate data' OnClick = CLIMPLOTButtonClick TabOrder = 2 end object PlotMenu: TMainMenu left = 8 top = 448 object File1: TMenuItem Caption = '&File' object Save1: TMenuItem Caption = '&Save...' OnClick = Save1Click end object N2: TMenuItem Caption = '-' end object Print1: TMenuItem Caption = '&Print...' OnClick = Print1Click end object PrintSetup1: TMenuItem Caption = 'P&rint Setup...' OnClick = PrintSetup1Click end object N1: TMenuItem Caption = '-' end object Exit1: TMenuItem Caption = 'E&xit' OnClick = ExitChartButtonClick end end end object ChartSaveDialog: TSaveDialog DefaultExt = '.wmf' left = 104 top = 448 end object PrintDialog: TPrintDialog left = 40 top = 448 end object PlotPrintSetupDialog: TPrinterSetupDialog left = 72 top = 448 end object mprChartSource: TUserDefinedChartSource OnGetChartDataItem = mprChartSourceGetChartDataItem left = 80 top = 40 end object mtChartSource: TUserDefinedChartSource OnGetChartDataItem = mtChartSourceGetChartDataItem left = 184 top = 104 end object mxtChartSource: TUserDefinedChartSource OnGetChartDataItem = mxtChartSourceGetChartDataItem left = 128 top = 168 end object mntChartSource: TUserDefinedChartSource OnGetChartDataItem = mntChartSourceGetChartDataItem left = 240 top = 224 end object MnthChartSource: TUserDefinedChartSource left = 160 top = 344 end end -- Thank you very much for your time. Sincerely, Dave Lawrence -- ------------------------------------------------------ David M. Lawrence | Home: (804) 559-9786 7471 Brook Way Court | Fax: (804) 559-9787 Mechanicsville, VA 23111 | Email: USA | http: http://fuzzo.com ------------------------------------------------------ "All drains lead to the ocean." -- Gill, Finding Nemo "We have met the enemy and he is us." -- Pogo "No trespassing 4/17 of a haiku" -- Richard Brautigan

Reply by email

Alexander Klenin
to David M. Lawrence
David M. Lawrence wrote 6 lines
Was the 2nd-Y axis patch (No. 13832; http://bugs.freepascal.org/view.php?id=13832) ever incorporated into the Lazarus/TAChart release? ?I'm new to Lazarus and don't quite know how to interpret the bugtracker page. ?I do know that I cannot find some of the changes mentioned in the patches -- such as for TAGraph -- in the latest version of TAGraph.

The changes were not taken literally. Instead, I have implemented more general solution, allowing arbitrary number of axises with arbitrary transformations, but at the cost of some additional complexity.

Show quoted text 7 lines
I do scientific programming and am trying to update some of my older Delphi/Pascal programs. ?I need the ability to independently set YMax and YMin values for both Y axes on climate diagrams (which plot both monthly precipitation and temperature data) on the same chart. ?Precipitation data are plotted as bar graphs, temperature data are plotted by line series. ?I can get all the data series plotted, but I cannot get the precip and temp data scaled properly.

If you are using 0.9.30 release, see "axis" demo.
If you are using trunk/snapshot, see "axistransf" demo.

Alexander S. Klenin

Reply by email

David M. Lawrence
to Alexander Klenin

Thanks, Alexander.

I have tried to deconstruct the code in the demo, but cannot understand it works, and my efforts to copy the code end in unspecified access violations.

In any event, I cannot set up simple multipiers like you have in the sample -- I have a database with hundreds of climate data files, and with new climate normals being released, would like to add hundreds more. Each data set would have to be transformed individually.

It might be more helpful to be able to set max and min values in TUserDefinedChartSource -- you have that capability in TRandomChartSource (that much I did understand from the axis demo).

Thanks again,

Dave

Alexander Klenin wrote 21 lines
On Thu, Jul 28, 2011 at 14:32, David M. Lawrence wrote: > Was the 2nd-Y axis patch (No. 13832; > http://bugs.freepascal.org/view.php?id=13832) ever incorporated into the > Lazarus/TAChart release? I'm new to Lazarus and don't quite know how to > interpret the bugtracker page. I do know that I cannot find some of the > changes mentioned in the patches -- such as for TAGraph -- in the latest > version of TAGraph. The changes were not taken literally. Instead, I have implemented more general solution, allowing arbitrary number of axises with arbitrary transformations, but at the cost of some additional complexity. > I do scientific programming and am trying to update some of my older > Delphi/Pascal programs. I need the ability to independently set YMax and > YMin values for both Y axes on climate diagrams (which plot both monthly > precipitation and temperature data) on the same chart. Precipitation data > are plotted as bar graphs, temperature data are plotted by line series. I > can get all the data series plotted, but I cannot get the precip and temp > data scaled properly. If you are using 0.9.30 release, see "axis" demo. If you are using trunk/snapshot, see "axistransf" demo.
------------------------------------------------------ David M. Lawrence | Home: (804) 559-9786 7471 Brook Way Court | Fax: (804) 559-9787 Mechanicsville, VA 23111 | Email: USA | http: http://fuzzo.com ------------------------------------------------------ "All drains lead to the ocean." -- Gill, Finding Nemo "We have met the enemy and he is us." -- Pogo "No trespassing 4/17 of a haiku" -- Richard Brautigan

Reply by email

Alexander Klenin
to David M. Lawrence
David M. Lawrence wrote
I have tried to deconstruct the code in the demo, but cannot understand it works, and my efforts to copy the code end in unspecified access violations.

What do you mean by "unspecified"? Did they happen inside TAChart code? If so, can you post a tracebacks?

In any event, I cannot set up simple multipiers like you have in the sample -- I have a database with hundreds of climate data files, and with new climate normals being released, would like to add hundreds more. ?Each data set would have to be transformed individually.

Are you talking about the linear transformation?
Well, you could write a loop finding min/man data value, and recalculate scale accordingly.
However, auto-scaling transformation does this for you.

It might be more helpful to be able to set max and min values in TUserDefinedChartSource -- you have that capability in TRandomChartSource (that much I did understand from the axis demo).

Those serve completely different purpose.
TRandomChartSource _generates_ data in the given range. Depending in the random seed, actual range between minimum and maximum generated values
may be smaller then one given by the properties.
Actual range is always calculated based on the data, including TUserDefinedChartSource,
so there is no need to set it explicitly.

Anyway, it seems that it is really time to start writing some documentation. I just did that -- see http://wiki.lazarus.freepascal.org/TAChart_documentation Hope that clarifies things.

Alexander S. Klenin

Reply by email

David M. Lawrence
to Alexander Klenin

No, they happened when I tried to plot the chart. I couldn't figure out how to implement the auto-scaling transformation from the demo. For example, I see catTAuto listed as a transformation in the object inspector and listed as a property in the axisdemo main.pas, but cannot find any code to implement it there. I do see it mentioned in main.lfm, but don't understand how it works -- it seems to list properties for the transform more than anything else.

In any event, for consistency's sake I need to maintain axes of -90 C to 60 C for the temperature axis, and 0 cm to 300 cm for the precipitation axis. Since I plot up to three temperature series, it's easier to set that as fixed and figure out how to transform the precipitation axis.

You seem to have a lot invested in the idea that flexible transformations are best from a coding standpoint, but the hundreds of charts I plot have to be plotted consistently -- there can be no individualized scaling. The bars on a graph from a site with a maximum monthly precipitation of 20 cm need to be one-tenth as tall as the bars from a site with maximum monthly precipitation of 200 cm. I am not just comparing the bars and lines on an individual chart, I am comparing one chart to similar charts from hundreds of sites around the world. That way I and others can tell the chart from a desert site, for example, from that of a tropical rainforest site or monsoon forest site. From that standpoint, being able to independently set max and min values for each vertical axis would be a lot better.

Since I am not sure this list accepts attachments, I will send you charts from two sites offlist for you to better see what I mean.

Thanks again for your time.

Sincerely,

Dave Lawrence

Alexander Klenin wrote 31 lines
On Fri, Jul 29, 2011 at 01:04, David M. Lawrence wrote: > I have tried to deconstruct the code in the demo, but cannot understand it > works, and my efforts to copy the code end in unspecified access violations. What do you mean by "unspecified"? Did they happen inside TAChart code? If so, can you post a tracebacks? > In any event, I cannot set up simple multipiers like you have in the sample > -- I have a database with hundreds of climate data files, and with new > climate normals being released, would like to add hundreds more. Each data > set would have to be transformed individually. Are you talking about the linear transformation? Well, you could write a loop finding min/man data value, and recalculate scale accordingly. However, auto-scaling transformation does this for you. > It might be more helpful to be able to set max and min values in > TUserDefinedChartSource -- you have that capability in TRandomChartSource > (that much I did understand from the axis demo). Those serve completely different purpose. TRandomChartSource _generates_ data in the given range. Depending in the random seed, actual range between minimum and maximum generated values may be smaller then one given by the properties. Actual range is always calculated based on the data, including TUserDefinedChartSource, so there is no need to set it explicitly. Anyway, it seems that it is really time to start writing some documentation. I just did that -- see http://wiki.lazarus.freepascal.org/TAChart_documentation Hope that clarifies things.
------------------------------------------------------ David M. Lawrence | Home: (804) 559-9786 7471 Brook Way Court | Fax: (804) 559-9787 Mechanicsville, VA 23111 | Email: USA | http: http://fuzzo.com ------------------------------------------------------ "All drains lead to the ocean." -- Gill, Finding Nemo "We have met the enemy and he is us." -- Pogo "No trespassing 4/17 of a haiku" -- Richard Brautigan

Reply by email

Alexander Klenin
to David M. Lawrence

Please, do not top-post. It makes it very hard to read and reply to your messages.

David M. Lawrence wrote 7 lines
No, they happened when I tried to plot the chart. ?I couldn't figure out how to implement the auto-scaling transformation from the demo. ?For example, I see catTAuto listed as a transformation in the object inspector and listed as a property in the axisdemo main.pas, but cannot find any code to implement it there. ?I do see it mentioned in main.lfm, but don't understand how it works -- it seems to list properties for the transform more than anything else.

There is no code -- just setting correct properties is enough.

Show quoted text 16 lines
In any event, for consistency's sake I need to maintain axes of -90 C to 60 C for the temperature axis, and 0 cm to 300 cm for the precipitation axis. ?Since I plot up to three temperature series, it's easier to set that as fixed and figure out how to transform the precipitation axis. You seem to have a lot invested in the idea that flexible transformations are best from a coding standpoint, but the hundreds of charts I plot have to be plotted consistently -- there can be no individualized scaling. ?The bars on a graph from a site with a maximum monthly precipitation of 20 cm need to be one-tenth as tall as the bars from a site with maximum monthly precipitation of 200 cm. ?I am not just comparing the bars and lines on an individual chart, I am comparing one chart to similar charts from hundreds of sites around the world. ?That way I and others can tell the chart from a desert site, for example, from that of a tropical rainforest site or monsoon forest site. ?From that standpoint, being able to independently set max and min values for each vertical axis would be a lot better.

I see now -- so you actually do NOT want auto-scale, but a fixed scale. In this case, simply use linear transformation and then Chart.Extent property.

You will have to calculate scale and offset yourself (once, at design-time). (From my quick calculation, you should use scale=0.5 and offset=-90, but check yourself)

Note, however, that if by chance your data will be outside of the designated extent,
it will be cut off.

I can see your point for axis min/max values, so maybe I implement them. However, how should they behave in the case of out-of-bounds data points I described above?

Alexander S. Klenin

Reply by email

David M. Lawrence
to Alexander Klenin
Alexander Klenin wrote 37 lines
Please, do not top-post. It makes it very hard to read and reply to your messages. On Fri, Jul 29, 2011 at 15:56, David M. Lawrence wrote: > No, they happened when I tried to plot the chart. I couldn't figure out how > to implement the auto-scaling transformation from the demo. For example, I > see catTAuto listed as a transformation in the object inspector and listed > as a property in the axisdemo main.pas, but cannot find any code to > implement it there. I do see it mentioned in main.lfm, but don't understand > how it works -- it seems to list properties for the transform more than > anything else. There is no code -- just setting correct properties is enough. > In any event, for consistency's sake I need to maintain axes of -90 C to 60 > C for the temperature axis, and 0 cm to 300 cm for the precipitation axis. > Since I plot up to three temperature series, it's easier to set that as > fixed and figure out how to transform the precipitation axis. > > You seem to have a lot invested in the idea that flexible transformations > are best from a coding standpoint, but the hundreds of charts I plot have to > be plotted consistently -- there can be no individualized scaling. The bars > on a graph from a site with a maximum monthly precipitation of 20 cm need to > be one-tenth as tall as the bars from a site with maximum monthly > precipitation of 200 cm. I am not just comparing the bars and lines on an > individual chart, I am comparing one chart to similar charts from hundreds > of sites around the world. That way I and others can tell the chart from a > desert site, for example, from that of a tropical rainforest site or monsoon > forest site. From that standpoint, being able to independently set max and > min values for each vertical axis would be a lot better. I see now -- so you actually do NOT want auto-scale, but a fixed scale. In this case, simply use linear transformation and then Chart.Extent property. You will have to calculate scale and offset yourself (once, at design-time). (From my quick calculation, you should use scale=0.5 and offset=-90, but check yourself)

I'll check the linear transform. Those values are what I was thinking they should be. I'll give them a shot.

Show quoted text 7 lines
Note, however, that if by chance your data will be outside of the designated extent, it will be cut off. I can see your point for axis min/max values, so maybe I implement them. However, how should they behave in the case of out-of-bounds data points I described above?

Out-of-bounds data points would be clipped. In my case, I determined my max/min limits empirically by scanning global temperature and precipitation records. There should be no out-of-bounds points -- on Earth, anyway. If climate conditions do affect extremes, I wrote batch procedures that allow me to redraw all the charts in my database with new maximum and minimum values in a matter of minutes.

Thanks again,

Dave

P.S. Does this list allow attachments?

------------------------------------------------------ David M. Lawrence | Home: (804) 559-9786 7471 Brook Way Court | Fax: (804) 559-9787 Mechanicsville, VA 23111 | Email: USA | http: http://fuzzo.com ------------------------------------------------------ "All drains lead to the ocean." -- Gill, Finding Nemo "We have met the enemy and he is us." -- Pogo "No trespassing 4/17 of a haiku" -- Richard Brautigan

Reply by email

Alexander Klenin
to David M. Lawrence
David M. Lawrence wrote 6 lines
Out-of-bounds data points would be clipped. ?In my case, I determined my max/min limits empirically by scanning global temperature and precipitation records. ?There should be no out-of-bounds points -- on Earth, anyway. ?If climate conditions do affect extremes, I wrote batch procedures that allow me to redraw all the charts in my database with new maximum and minimum values in a matter of minutes.

I see. You may wish to enter your feature request in the bug tracker so it will not be forgotten.
As a quick fix, since r31821 you can use TConstantLine as described in http://wiki.lazarus.freepascal.org/TAChart_documentation#Constant_line_series

Alexander S. Klenin

Reply by email

David M. Lawrence
to David M. Lawrence: I'll check the linear transform. Those values are what I was thinking they should be. …

The linear transform worked -- I finally figured out how to implement it. The chart is almost where it should be, except for the X-axis labels. I need to dynamically define which of two options to use:

J F M A M J J A S O N D (MnthNHLabels) for northern hemisphere sites, and J A S O N D J F M A M J (MnthSHLabels) for southern hemisphere sites.

The compiler seemed to have no problem with my code:

   if lat < 0 then ClimateDataChart.BottomAxis.Marks.Source := MnthSHLabels
     else ClimateDataChart.BottomAxis.Marks.Source := MnthNHLabels;

The data source options I have tried, however (TListChartSource and TUserDefinedChartSource) seem determined to convert the strings to numbers -- primarily 0. What kind of chart source would allow me to use the strings above instead? Or is there something else I would need to do?

Thanks again,

Dave

David M. Lawrence wrote 12 lines
On 7/29/2011 1:21 AM, Alexander Klenin wrote: > I see now -- so you actually do NOT want auto-scale, but a fixed scale. > In this case, simply use linear transformation and then Chart.Extent > property. > > You will have to calculate scale and offset yourself (once, at > design-time). > (From my quick calculation, you should use scale=0.5 and offset=-90, > but check yourself) I'll check the linear transform. Those values are what I was thinking they should be. I'll give them a shot.
------------------------------------------------------ David M. Lawrence | Home: (804) 559-9786 7471 Brook Way Court | Fax: (804) 559-9787 Mechanicsville, VA 23111 | Email: USA | http: http://fuzzo.com ------------------------------------------------------ "All drains lead to the ocean." -- Gill, Finding Nemo "We have met the enemy and he is us." -- Pogo "No trespassing 4/17 of a haiku" -- Richard Brautigan

Reply by email

Alexander Klenin
to David M. Lawrence
David M. Lawrence wrote 17 lines
The linear transform worked -- I finally figured out how to implement it. The chart is almost where it should be, except for the X-axis labels. ?I need to dynamically define which of two options to use: J F M A M J J A S O N D (MnthNHLabels) for northern hemisphere sites, and J A S O N D J F M A M J (MnthSHLabels) for southern hemisphere sites. The compiler seemed to have no problem with my code: ?if lat < 0 then ClimateDataChart.BottomAxis.Marks.Source := MnthSHLabels ? ?else ClimateDataChart.BottomAxis.Marks.Source := MnthNHLabels; The data source options I have tried, however (TListChartSource and TUserDefinedChartSource) seem determined to convert the strings to numbers -- primarily 0. ?What kind of chart source would allow me to use the strings above instead? ?Or is there something else I would need to do?

Assuming the source correctly fills Text field of the data items, you only need to set Marks.Style property to smsLabel.

Alexander S. Klenin

Reply by email

Alexander Klenin
to Alexander Klenin: I see. You may wish to enter your feature request in the bug tracker so it will not be…
Alexander Klenin wrote 12 lines
On Fri, Jul 29, 2011 at 16:45, David M. Lawrence wrote: > Out-of-bounds data points would be clipped. ?In my case, I determined my > max/min limits empirically by scanning global temperature and precipitation > records. ?There should be no out-of-bounds points -- on Earth, anyway. ?If > climate conditions do affect extremes, I wrote batch procedures that allow > me to redraw all the charts in my database with new maximum and minimum > values in a matter of minutes. I see. You may wish to enter your feature request in the bug tracker so it will not be forgotten. As a quick fix, since r31821 you can use TConstantLine as described in http://wiki.lazarus.freepascal.org/TAChart_documentation#Constant_line_series

Added TChartAxis.Range property in r31822

Alexander S. Klenin

Reply by email

David M. Lawrence
to Alexander Klenin

Excuse me for being slow, but where do I find this update? I haven't figured all this out.

Dave

Alexander Klenin wrote 14 lines
On Fri, Jul 29, 2011 at 18:34, Alexander Klenin wrote: > On Fri, Jul 29, 2011 at 16:45, David M. Lawrence wrote: >> Out-of-bounds data points would be clipped. In my case, I determined my >> max/min limits empirically by scanning global temperature and precipitation >> records. There should be no out-of-bounds points -- on Earth, anyway. If >> climate conditions do affect extremes, I wrote batch procedures that allow >> me to redraw all the charts in my database with new maximum and minimum >> values in a matter of minutes. > I see. You may wish to enter your feature request in the bug tracker > so it will not be forgotten. > As a quick fix, since r31821 you can use TConstantLine as described in > http://wiki.lazarus.freepascal.org/TAChart_documentation#Constant_line_series Added TChartAxis.Range property in r31822
------------------------------------------------------ David M. Lawrence | Home: (804) 559-9786 7471 Brook Way Court | Fax: (804) 559-9787 Mechanicsville, VA 23111 | Email: USA | http: http://fuzzo.com ------------------------------------------------------ "All drains lead to the ocean." -- Gill, Finding Nemo "We have met the enemy and he is us." -- Pogo "No trespassing 4/17 of a haiku" -- Richard Brautigan

Reply by email