---
name: plot_theme
kind: function
lang: cpp
domain: core
version: "1.0.0"
purity: pure
signature: "void plot_theme_dark() / void plot_theme_light() / void plot_theme_high_contrast() / void plot_theme_apply(const PlotTheme& theme)"
description: "Gestiona temas y paletas de colores para ImPlot e ImGui, con presets dark/light/high-contrast y soporte para temas custom"
tags: [theme, colors, palette, styling, dashboard]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [imgui, implot]
tested: false
tests: []
test_file_path: ""
file_path: "cpp/functions/core/plot_theme.cpp"
framework: imgui
params:
  - name: theme
    desc: "Estructura PlotTheme con nombre, colores de fondo/frame/texto/grid y paleta de hasta 10 colores para series de datos"
output: "Aplica el tema al contexto ImPlot/ImGui actual modificando ImGuiStyle y ImPlotStyle en memoria"
---

# plot_theme

Configura el aspecto visual de ventanas ImGui y graficas ImPlot en un solo paso. Tres presets listos para usar y una API de tema custom para casos especificos.

## Presets

### `plot_theme_dark()`

Fondo oscuro (`#1A1A1F`) con paleta de 10 colores suaves: steel blue, soft green, warm orange, muted red, lavender, teal, gold, lime, pink, periwinkle. Ideal para dashboards de monitoreo.

### `plot_theme_light()`

Fondo claro (`#F7F7F7`) con colores vibrantes de alto contraste sobre blanco. Recomendado para capturas de pantalla o exportacion a documentos.

### `plot_theme_high_contrast()`

Fondo negro puro con colores neon: cyan, green, orange, magenta, yellow. Disenado para presentaciones en pantallas grandes o condiciones de poca luz.

## Uso

```cpp
#include "plot_theme.h"

// Al inicio del frame, antes de BeginMainMenuBar / Begin
plot_theme_dark();

// O con tema custom
PlotTheme my_theme = plot_theme_preset_dark();
my_theme.palette[0] = ImVec4(1.0f, 0.0f, 0.5f, 1.0f); // override primer color
plot_theme_apply(my_theme);
```

## API

```cpp
// Presets de aplicacion directa
void plot_theme_dark();
void plot_theme_light();
void plot_theme_high_contrast();

// Tema custom
void plot_theme_apply(const PlotTheme& theme);

// Obtener structs para inspeccion o modificacion parcial
PlotTheme plot_theme_preset_dark();
PlotTheme plot_theme_preset_light();
PlotTheme plot_theme_preset_high_contrast();
```

## Estructura PlotTheme

```cpp
struct PlotTheme {
    const char* name;       // nombre del colormap registrado en ImPlot
    ImVec4 bg;              // fondo del plot (ImPlotCol_PlotBg, ImGuiCol_WindowBg)
    ImVec4 frame_bg;        // fondo del frame (ImPlotCol_FrameBg, ImGuiCol_FrameBg)
    ImVec4 text;            // color del texto (todos los ImGui/ImPlot text cols)
    ImVec4 grid;            // lineas de cuadricula y ticks
    ImVec4 palette[10];     // paleta de colores para series de datos
    int palette_count;      // numero de colores activos en la paleta (1-10)
};
```

## Notas

- `plot_theme_apply` llama a `ImPlot::AddColormap` y `ImPlot::SetColormap` con el campo `name` del tema como identificador. Si se llama dos veces con el mismo `name`, ImPlot registra el colormap de nuevo — usar nombres distintos si se crean multiples variantes en runtime.
- La funcion es "pure" en el sentido de que su unico efecto es escribir en `ImGuiStyle` e `ImPlotStyle` del contexto activo, sin I/O ni estado global propio.
- Requiere que `ImGui::CreateContext()` e `ImPlot::CreateContext()` hayan sido llamados antes del primer uso.
- Compatible con C++17. No usa excepciones ni RTTI.
