Files
fn_registry/cpp/functions/viz/bar_chart.md
T
egutierrez b828fd6acc feat(cpp/viz): kpi_card v1.1 + bar_chart v1.1 — contenedor y altura fijas
kpi_card:
- v1.1: envuelve el contenido en BeginChild con surface bg + border +
  radius::md + padding::md (tokens). Replica Mantine Paper withBorder
  radius="md" p="md" usado en @fn_library/kpi_card.tsx.
- Ancho adaptativo via GetContentRegionAvail — requiere contenedor que
  propague ancho constrained (ImGui::BeginTable). dashboard_grid / BeginGroup
  no funcionan porque no constrainen ancho y la card desborda la celda.
- Linea de trend SIEMPRE visible: delta, sparkline, o em dash (text_dim)
  como placeholder, para que un grid de KPIs quede alineado vertical.
- Colores del delta via tokens (success/error) en vez de hardcoded ImVec4.

bar_chart:
- v1.1: altura explicita como parametro (default 200px). Sin esto, ImPlot
  con ImVec2(-1, 0) entra en feedback loop cuando esta dentro de un
  dashboard_panel (BeginChild con AutoResizeY): plot pide espacio -> padre
  se redimensiona -> plot recalcula. Efecto visual: las barras se deslizan
  los primeros frames.
- Ejes blindados: Lock + NoInitialFit + Cond_Always ademas de los flags
  previos. Y max pre-calculado con 15% de headroom.
- Sin inputs (NoInputs|NoFrame|NoBoxSelect|NoMouseText): estos charts son
  de resumen, no de exploracion.

Actualizados los .md correspondientes con el contrato visual + requisitos
de contenedor, para que cualquier dashboard que componga estos primitivos
obtenga el mismo look.

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

2.5 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
bar_chart component cpp viz 1.1.0 pure void bar_chart(const char* title, const char* const* labels, const float* values, int count, float bar_width = 0.67f, float height = 200.0f) Renderiza un grafico de barras verticales con ImPlot, ejes pineados (Lock + Cond_Always) y altura explicita para evitar feedback loops visuales
implot
chart
visualization
gpu
bar
locked-axes
false
implot
false
cpp/functions/viz/bar_chart.cpp imgui
name desc
title Titulo del grafico de barras (tambien se usa como id interno del plot)
name desc
labels Array de etiquetas para el eje X, una por barra
name desc
values Array de valores numericos para la altura de cada barra
name desc
count Numero de barras (longitud de labels y values)
name desc
bar_width Ancho de cada barra como fraccion del hueco de celda (default 0.67)
name desc
height Altura del plot en pixeles (default 200). Explicita para evitar feedback loops con contenedores AutoResizeY
Renderiza el grafico de barras en el frame ImGui actual con ejes X/Y pineados

bar_chart

Barras verticales con ImPlot, pensado para dashboards estaticos (resumenes, KPIs). Diseno:

  • Ejes pineadosImPlotCond_Always + ImPlotAxisFlags_Lock + ImPlotAxisFlags_NoInitialFit. Sin esto, ImPlot auto-fitea cada frame y las barras oscilan los primeros frames.
  • Y max con 15% de headroom — calculado a partir de values una vez, mas estetico que el fit apretado de ImPlot.
  • Altura explicitaImVec2(-1, height) en vez de ImVec2(-1, 0). Dentro de un dashboard_panel (BeginChild con AutoResizeY), un height=0 crea un feedback loop: el plot pide espacio al padre, el padre se redimensiona al plot, el plot recalcula y asi. El efecto visual es que las barras se deslizan de lado al abrir la ventana. Con height fija no hay loop.
  • Sin inputsImPlotFlags_NoInputs | NoFrame | NoBoxSelect | NoMouseText. Pensado para visualizacion, no exploracion.

Debe llamarse dentro del render callback de fn::run_app.

Ejemplo

const char* langs[] = {"go", "py", "ts", "sh", "cpp"};
float counts[]     = {412, 187, 94, 63, 36};
bar_chart("Functions by lang", langs, counts, 5);        // height por defecto 200
bar_chart("Compact",          langs, counts, 5, 0.8f, 120.0f); // compacto