Files
fn_registry/cpp/functions/viz/pie_chart.md
T
egutierrez 3f622561ce feat(cpp/viz): static-plot primitive + tooltips + rotated labels + card compacta
Nuevo primitivo compartido:
- cpp/functions/viz/plot_static.h: header-only con flags ImPlotFlags /
  ImPlotAxisFlags agrupados (NoFrame|NoMenus|NoBoxSelect|NoMouseText +
  Lock|NoInitialFit|NoHighlight) para visualizacion estatica en
  dashboards. Lo usan todos los charts de viz/.

Charts refactorizados a v1.1 con parametro `height` explicito (rompe el
feedback loop con contenedores AutoResizeY que producia vibracion al
redimensionar) y ejes pineados con ImPlotCond_Always:
- bar_chart v1.2: tooltip al hover (label + valor) + auto-rotacion de
  labels a 45 cuando no caben horizontalmente (medidos con CalcTextSize
  vs ancho del plot). Los labels rotados se dibujan manualmente con
  ImDrawList::PrimQuadUV + ImFontBaked::FindGlyph (API ImGui 1.92+).
- pie_chart v1.1: tooltip por slice (detecta cual via atan2 desde centro
  en sentido CCW matematico, que es como ImPlot dibuja los slices desde
  angle0=90) con label + valor + porcentaje. Aspect 1:1 mantenido.
- line_plot, scatter_plot, histogram v1.1: ejes pineados con limites
  calculados de min/max + 5% headroom (histogram usa AutoFit por los
  bins dinamicos, con Lock para bloquear pan/zoom).

kpi_card v1.2: card mas compacta — altura 78px (antes 108), font scale
1.4x (antes 1.8x), padding sm (antes md). Apto para densidades altas
de KPIs en dashboards.

fullscreen_window v0.2: NoScrollbar|NoScrollWithMouse para eliminar el
scrollbar fugaz que aparecia cuando el contenido excedia por 1-2px la
ventana, reflow de ancho y vibracion visible al redimensionar.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 21:31:00 +02:00

2.3 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, framework, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path framework params output
pie_chart component cpp viz 1.1.0 pure void pie_chart(const char* title, const char* const* labels, const float* values, int count, float radius = 0.0f, float height = 200.0f) Pie/donut chart con ImPlot, ejes pineados, altura explicita y tooltip por slice al pasar el mouse
implot
chart
visualization
gpu
pie
donut
tooltip
locked-axes
false
implot
false
cpp/functions/viz/pie_chart.cpp imgui
name desc
title Titulo del grafico (se usa tambien como id interno del plot)
name desc
labels Array de etiquetas para cada segmento del pie
name desc
values Array de valores numericos para cada segmento
name desc
count Numero de segmentos (longitud de labels y values)
name desc
radius Radio del pie (0 = auto 0.4). Positivo = radio explicito. Negativo = modo donut con outer radius = |radius|
name desc
height Altura del plot en pixeles (default 200). Explicita para evitar feedback loops con contenedores AutoResizeY
Renderiza el pie en el frame ImGui actual; muestra tooltip con label + valor + % al pasar por encima de un slice

pie_chart

Wrapper atomico sobre ImPlot::PlotPieChart configurado para visualizacion estatica en dashboards. Modo pie (radius >= 0) o donut (radius < 0).

v1.1 (2026-04-24)

  • Altura explicita (height): necesaria para evitar vibracion en contenedores con AutoResizeY. Ver viz/plot_static.h.
  • Flags compartidos desde plot_static::kPlotFlags + kAxisFlagsHidden (axis decorations off): sin pan/zoom, sin menus, sin auto-fit, sin highlight al hover.
  • Tooltip por slice: calcula que slice esta bajo el cursor usando atan2(mouse - center) (ImPlot dibuja slices en sentido CCW matematico desde angulo 90°, arriba) y muestra label + valor + porcentaje.
  • Aspect 1:1 mantenido con ImPlotFlags_Equal para que el pie no se deforme en paneles rectangulares.

Ejemplo

const char* labels[] = {"Pure", "Impure"};
float values[] = {412, 187};
pie_chart("##purity", labels, values, 2);                  // pie normal, h=200
pie_chart("##purity", labels, values, 2, -0.4f, 260.0f);   // donut, h=260