Skip to content

1.4.0

Choose a tag to compare

@iliaal iliaal released this 20 Jun 23:40
1.4.0
45a2ccb

Added

  • Dendrogram and Partition chart classes (catalog 36 to 38): a node-link hierarchy tree and a rectangular hierarchy/icicle, both fed by setHierarchy().
  • ChordDiagram::setStyle(STYLE_DIRECTED): ribbons with an arrowhead at each link's target.
  • AreaChart::setStreamMode(): centered stacked silhouette (stream graph / ThemeRiver).
  • GaugeChart::setStyle(STYLE_SOLID): radial progress-fill arc instead of a needle.
  • PieChart::setStartAngle() / setEndAngle() for semi-circle and partial pies, and setRings() for nested-donut bands.
  • BarChart::setBarStyle(BAR_STYLE_LOLLIPOP) and BAR_STYLE_DUMBBELL, and setOrientation(BAR_RADIAL) for circular "race track" bars.
  • AreaChart honors setLineInterpolation(): INTERP_SMOOTH draws a Catmull-Rom curved fill, INTERP_STEP_* a stepped fill.
  • PieChart variable-radius (rose) pies: a slice radius key scales that slice's outer radius by a second metric while the angle tracks the value.
  • Seven StockChart indicators: addVWAP() and addZigZag() overlays, addATR() / addCCI() / addWilliamsR() / addAroon() / addStdDev() panes; overlay and pane caps raised to 6.
  • Ten chart classes (catalog 26 to 36): ArcDiagram, ChordDiagram, NetworkChart, PopulationPyramid, ViolinPlot, CirclePacking, Pictogram, VennDiagram, WordCloud, SerpentineTimeline.

Changed

  • Chart and Symbol objects (and subclasses) now forbid dynamic properties (@strict-properties) and serialization (@not-serializable); both previously failed silently.

Fixed

  • Array data setters now accept arrays carrying PHP references; a series, slice, or hierarchy walked with foreach ($a as &$v) previously dropped values or threw "found no numeric values".
  • Funnel::setStyle(STYLE_CONE) no longer leaves white crescents between bands; arcs are depthed from each boundary's own half-width.
  • LineChart::setLineInterpolation(INTERP_STEP_BEFORE) now draws a staircase instead of collapsing to a diagonal.
  • Gallery generators no longer require the renamed tests/_font_candidates.inc.php.
  • Hardened several double-to-int casts on extreme but finite input (NaN / Inf / overflow): Funnel::setStages() magnitude cap, log-axis subnormal minima, horizontal-bar category annotations, BubbleChart X mapping, and LinearMeter / BulletChart::setRange() non-finite spans now reject or clamp instead of risking undefined behavior.
  • GaugeChart solid-style zones honor reversed {from > to} bounds, matching the needle renderer.
  • PieChart exploded slices place their image-map hot-spot over the offset wedge instead of the un-exploded centre.
  • StockChart keeps the price pane from collapsing to negative height when several indicator panes share a short canvas.
  • PolarChart smooth (Catmull-Rom) series no longer silently truncate past ~128 segments.
  • PopulationPyramid scales bars only over the drawn categories, so a stray trailing value past the category count no longer collapses the visible bars.
  • BarChart STACK_LAYER scales by the per-series extent rather than the stacked sum (which halved layered heights); horizontal BAR_STYLE_LOLLIPOP and BAR_STYLE_DUMBBELL now render instead of falling back to plain bars.
  • Multi-line text measurement propagates FreeType failures instead of returning understated bounds.
  • SurfaceChart dense grids stay inside the plot rect; CalendarHeatmap fits wide date spans with smaller cells and rejects only spans too wide for one pixel per week; ParetoChart rejects a canvas too narrow for its bar count instead of stacking every bar at one x.
  • BoxPlot honors setYAxisScale(SCALE_LOG); AreaChart scales the secondary Y axis as log too (rejecting non-positive right-axis data) and no longer drops log-axis gaps to the baseline.
  • NetworkChart renders node-only graphs (no links required); SankeyChart rejects cyclic flow graphs with a clear error; VennDiagram draws fully-overlapping sets as concentric circles instead of a separated triad.
  • The shared color table grows on demand instead of aliasing every color past 512 distinct entries to a single handle.
  • PDF output composites translucent fills against the page background instead of rendering them opaque (requires --with-pdfio).
  • SSSE3 capability detection is resolved at module start-up, closing a benign first-call data race under ZTS.
  • Waterfall rotated x-axis labels (setXAxisLabelAngle) reserve bottom margin from the actual bar labels instead of overflowing the canvas.
  • Waterfall::setBars() caps value magnitude so extreme inputs can't overflow the running cumulative into negative-height rectangles.
  • WordCloud honors setTransparentBackground(true) instead of always painting an opaque canvas.