Source code for vuecore.plots.plot_factory
from typing import Any, Type
import pandas as pd
from vuecore import EngineType, PlotType
from vuecore.engines import get_builder, get_saver
from pydantic import BaseModel
[docs]
def create_plot(
data: pd.DataFrame,
config: Type[BaseModel],
plot_type: PlotType,
engine: EngineType = EngineType.PLOTLY,
file_path: str = None,
**kwargs,
) -> Any:
"""
Factory function to create, style, and optionally save plots.
This function handles the common workflow for creating plots:
1. Validate configuration using the provided Pydantic model
2. Get the appropriate builder function from the engine registry
3. Build the figure using the builder
4. Optionally save the plot if a file path is provided
Parameters
----------
data : pd.DataFrame
The DataFrame containing the data to be plotted.
config : Type[BaseModel]
The Pydantic config class for validation.
plot_type : PlotType
The plot type from the `PlotType` enum (e.g., PlotType.BAR, PlotType.BOX, etc).
engine : EngineType, optional
The plotting engine to use for rendering the plot.
Defaults to `EngineType.PLOTLY`.
file_path : str, optional
If provided, the path where the final plot will be saved.
**kwargs
Keyword arguments for plot configuration.
Returns
-------
Any
The final plot object returned by the selected engine.
"""
# 1. Validate configuration using Pydantic
config = config(**kwargs)
# 2. Get the correct builder function from the registry
builder_func = get_builder(plot_type=plot_type, engine=engine)
# 3. Build the figure object
figure = builder_func(data, config)
# 4. Save the plot using the correct saver function, if a file_path is provided
if file_path:
saver_func = get_saver(engine=engine)
saver_func(figure, file_path)
return figure