Difference between revisions of "TAChart"

From Lazarus wiki
Jump to navigationJump to search
(category)
Line 61: Line 61:
 
** add shortcuts, use actions
 
** add shortcuts, use actions
 
** convert to grid/checklist, show enabled/active checkboxes
 
** convert to grid/checklist, show enabled/active checkboxes
** child auto-renaming
 
* bug: series editor hides on double-click: 17077
 
* bug: AV on Delete
 
  
 
==== Axises/Transformations ====
 
==== Axises/Transformations ====
Line 70: Line 67:
 
** auto-scaling to percent range
 
** auto-scaling to percent range
 
** non-monotonic (?)
 
** non-monotonic (?)
** user-defined transform
+
** partial-linear transform (?)
** partial-linear transform (?) partial zoom demo
 
 
** inverted as transformation (?)
 
** inverted as transformation (?)
 
** logBase 0 => e ?
 
** logBase 0 => e ?
Line 81: Line 77:
 
* axis.DateTimeFormat(?)
 
* axis.DateTimeFormat(?)
 
* axis.Depth
 
* axis.Depth
 +
* update margins for axis.ZPosition
 
* walls
 
* walls
  
 
==== Series ====
 
==== Series ====
  
* 3-d series: pie, bubble, box-and-whiskers(?)
+
* 3-d series: pie, bubble, box-and-whiskers(?), OHLC(?)
 +
* bar: pyramid, code, cylinder, prism, number of faces
 +
* bug: all-negative area has no zero plane
 
* top-down and right-to-left series
 
* top-down and right-to-left series
* Z axis
+
* Z axis, XZ and YZ grids
* FuncSeries.AxisIndexX
+
* polar axis
* rotated func series
+
* polar series: labels, brush, pointers
* polar axis and series
 
* moving series between charts
 
 
* splines
 
* splines
 
* LineStyle -> AxisIndex for TConstantLine (?)
 
* LineStyle -> AxisIndex for TConstantLine (?)
 
* TConstantLine.Source -- use X only
 
* TConstantLine.Source -- use X only
* 3-d surface, color-coding & isolines
+
* 3-d surface
 +
* color map:
 +
** isolines & labels,
 +
** gradients,
 +
** data interpolation, auto-scale colors (thresholds in percent)
 +
** better design-time display,
 +
** transparency threshold (?) / ColorSource.Y as opacity (?)
 
* range bar series
 
* range bar series
 
* Gantt series (bar.starty, bar.startx, bar.endx)
 
* Gantt series (bar.starty, bar.startx, bar.endx)
 
* stacked/donut pie series (?)
 
* stacked/donut pie series (?)
* labels for stacked series
+
* test/fix rotated stacked series
 +
* subcharts
 +
* GIS
 +
* func series: GetNearestPoint/reticule x=>f(x), discontinuity pointers
  
 
==== Legend ====
 
==== Legend ====
  
 
* multiple blocks per legend line
 
* multiple blocks per legend line
* legend line: per point, per stack item
+
* legend line per stack level
* draw pie slices in the legend
+
* format
 +
* legendpanel.autosize -> scrollable with scrollbox
  
 
==== Tools ====
 
==== Tools ====
  
* userdefined tool
 
 
* test/fix many charts per toolset
 
* test/fix many charts per toolset
 
* decouple reticule from TChart
 
* decouple reticule from TChart
Line 122: Line 128:
 
==== Sources ====
 
==== Sources ====
  
 +
* OO (incompatible?)
 
* YList in Marks.Format
 
* YList in Marks.Format
* calculated sources: range=0 -- from the start, optimization, sliding median
+
* calculated sources: optimization, sliding median
 
* bug: db-source does not auto-refresh after dataset changes (?)
 
* bug: db-source does not auto-refresh after dataset changes (?)
 +
* NaN as null -- break in line, area, polar, pie (?)
  
 
==== Labels ====
 
==== Labels ====
  
* rotated chart title support (? title is multi-line)
 
 
* frame shapes: rounded rects, ellipses, callouts
 
* frame shapes: rounded rects, ellipses, callouts
 
* fix/improve pie series label positioning
 
* fix/improve pie series label positioning
 +
** "sideband" positioning
 +
** special label attachments: "center", "side center", "nearest point"
 
* auto-position labels: two-level, generic, GA
 
* auto-position labels: two-level, generic, GA
 
* free labels (notes)
 
* free labels (notes)
Line 137: Line 146:
 
==== Presentation ====
 
==== Presentation ====
  
* striped background
+
* embellishments: gradient, shadow, glow(?)
* embellishments: antialiasing, gradient, shadow, glow(?)
 
 
** color->embellishment mapping(?)
 
** color->embellishment mapping(?)
 
* transparency
 
* transparency
* Generic drawer: TCanvas/AggPas/OpenGL
+
* Generic renderer (?): OpenGL, SVG, true 3-d
 +
* TCanvas-independent API: TChartPen, TChartBrush, TChartFont
 
* panes
 
* panes
* styles: usepen/usebrush, apply to more series, usecolor
+
* styles: apply to more series, usecolor, perstack/perpoint
 +
** embelishments from styles ?
 +
 
 +
==== Chart ====
 +
 
 +
* DepthX/DepthY
 +
* navigation: "axis scrollbar"
 +
* measuring units: pixels, graph, percent
  
 
==== Other ====
 
==== Other ====
Line 150: Line 166:
 
* more tests
 
* more tests
 
* oscilloscope demo
 
* oscilloscope demo
* printing
 
 
* better icons
 
* better icons
 
* lazreport integration
 
* lazreport integration
* export to pdf/svg
 
 
* tutorials
 
* tutorials
 
* wizards
 
* wizards

Revision as of 23:58, 10 June 2011

Deutsch (de) English (en) español (es) français (fr) português (pt) русский (ru) українська (uk) 中文(中国大陆)‎ (zh_CN)

About

TAChart is a charting LGPL component for Lazarus (TeeChart like). It contains the functions that Philippe Martinole developed for the TeleAuto project and lots of changes introduced by Luis Rodrigues while porting the Epanet application from Delphi to Lazarus. The code was then extensively rewritten, expanded and is now maintained by Alexander Klenin.

If you have questions, bug reports or feature requests, please post them to the Lazarus mailing list.

Features

  • Pie Series
  • Bar Series
  • Area Series
  • Line Series (can work as Point Series)
  • Function Series with domain support
  • Unlimited number of series and points on graph
  • Flexible chart sources, including design-time editable, random, dynamic and db-aware sources.
  • Graph legend, title and footer
  • Axis labels and marks, manually set or auto-generated
  • Arbitrary number of axises per chart
  • Axis inversion, independent scale and offset, logarithmic scale
  • Interactive zoom
  • Reticule or vertical reticule with point measure
  • Auto or manual graph limits
  • Smart marks drawing
  • Vertical and horizontal lines
  • Easily extensible with new graph types

Screenshot

Here is an example of TAChart displaying a Line Series, Bar Series and Pie Series

tachart.png

Authors

Luís Rodrigues, Philippe Martinole, Alexander Klenin

Download

The latest stable release can be found on the in the Lazarus SVN repository (The components are on the Chart Tab)

Usage

See included examples in Lazarus source in (Lazarus Install Dir)/components/tachart/demo/

Roadmap

Below is a list of items that would be good to have in TAChart. Some of them are planned for implementation by the current maintainer, others will require patches from interested contributors.

Editors

  • TChartExtent editor
  • axis index editor
  • series index list editor
  • ListSource.DataPoints editor
  • marks.format/style editor
  • subcomponent editor
    • add shortcuts, use actions
    • convert to grid/checklist, show enabled/active checkboxes

Axises/Transformations

  • finish multiaxis
    • auto-scaling to percent range
    • non-monotonic (?)
    • partial-linear transform (?)
    • inverted as transformation (?)
    • logBase 0 => e ?
  • finish TIntervalChartSource
  • various axis marks steps -- logarithmic etc.
  • "center" aligned axis
  • test/fix inverted axis
  • axis.autoscale as a shortcut(?)
  • axis.DateTimeFormat(?)
  • axis.Depth
  • update margins for axis.ZPosition
  • walls

Series

  • 3-d series: pie, bubble, box-and-whiskers(?), OHLC(?)
  • bar: pyramid, code, cylinder, prism, number of faces
  • bug: all-negative area has no zero plane
  • top-down and right-to-left series
  • Z axis, XZ and YZ grids
  • polar axis
  • polar series: labels, brush, pointers
  • splines
  • LineStyle -> AxisIndex for TConstantLine (?)
  • TConstantLine.Source -- use X only
  • 3-d surface
  • color map:
    • isolines & labels,
    • gradients,
    • data interpolation, auto-scale colors (thresholds in percent)
    • better design-time display,
    • transparency threshold (?) / ColorSource.Y as opacity (?)
  • range bar series
  • Gantt series (bar.starty, bar.startx, bar.endx)
  • stacked/donut pie series (?)
  • test/fix rotated stacked series
  • subcharts
  • GIS
  • func series: GetNearestPoint/reticule x=>f(x), discontinuity pointers

Legend

  • multiple blocks per legend line
  • legend line per stack level
  • format
  • legendpanel.autosize -> scrollable with scrollbox

Tools

  • test/fix many charts per toolset
  • decouple reticule from TChart

Optimization

  • caches
    • graphpoints
    • imagepoints
    • layers/barriers

Sources

  • OO (incompatible?)
  • YList in Marks.Format
  • calculated sources: optimization, sliding median
  • bug: db-source does not auto-refresh after dataset changes (?)
  • NaN as null -- break in line, area, polar, pie (?)

Labels

  • frame shapes: rounded rects, ellipses, callouts
  • fix/improve pie series label positioning
    • "sideband" positioning
    • special label attachments: "center", "side center", "nearest point"
  • auto-position labels: two-level, generic, GA
  • free labels (notes)
  • control label attachment (top, bottom, center, ...)

Presentation

  • embellishments: gradient, shadow, glow(?)
    • color->embellishment mapping(?)
  • transparency
  • Generic renderer (?): OpenGL, SVG, true 3-d
  • TCanvas-independent API: TChartPen, TChartBrush, TChartFont
  • panes
  • styles: apply to more series, usecolor, perstack/perpoint
    • embelishments from styles ?

Chart

  • DepthX/DepthY
  • navigation: "axis scrollbar"
  • measuring units: pixels, graph, percent

Other

  • more documentation
  • more tests
  • oscilloscope demo
  • better icons
  • lazreport integration
  • tutorials
  • wizards

Internal

  • AddSubcomponent => SetParentComponent
  • extract TSubcomponentClassRegistry

See also