You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
BarChartSTACK_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.