fix(eda): keep-together de grafico+titulo+descripcion en 5 capitulos
modelos, timeseries, geospatial, agregacion y missingness (bloque de ranking) emitian Heading+Figure sueltos, de modo que el paginador podia dejar el titulo y la descripcion de una columna/par en una pagina y su grafico en la siguiente. Se envuelve cada unidad (Heading + descripcion/tablas + Figure) en un model.Group, la unidad keep-together que ambos renderers (PDF/PPTX) miden entera y mueven en bloque cuando no cabe, siguiendo el patron ya usado por num_distr y correlacion. Orden y contenido de bloques identicos: solo se envuelven. La degradacion honesta se conserva (una figura None nunca queda dentro de un Group vacio). Los tests que asertaban figuras sueltas se ajustaron para comprobar la Figure DENTRO del Group, sin relajar ningun assert. Bump CHAPTER_VERSION PATCH (1.0.0->1.0.1) en los 5 capitulos. El heatmap de co-ocurrencia de missingness ya iba agrupado y no se toca.
This commit is contained in:
@@ -61,7 +61,9 @@ try:
|
||||
except Exception: # noqa: BLE001
|
||||
build_geo_scatter = None # type: ignore[assignment]
|
||||
|
||||
CHAPTER_VERSION = "1.0.0"
|
||||
# 1.0.1 — keep-together: el mapa (scatter geográfico) se envuelve con su Heading e
|
||||
# intro en un model.Group para que el paginador no lo separe de su título/descripción.
|
||||
CHAPTER_VERSION = "1.0.1"
|
||||
CHAPTER_ID = "geospatial"
|
||||
CHAPTER_TITLE = "Análisis geoespacial"
|
||||
|
||||
@@ -455,11 +457,14 @@ def build_geospatial(profile: dict, ctx: dict):
|
||||
scatter = {}
|
||||
maker = _make_geo_scatter(scatter, lat_col, lon_col) if scatter else None
|
||||
if maker is not None:
|
||||
blocks.append(model.Figure(
|
||||
# Keep-together: the chapter heading + intro + the map figure ride on
|
||||
# the same page/slide (the renderers move the whole Group when it does
|
||||
# not fit), so the map never gets stranded from its title/description.
|
||||
blocks = [model.Group(blocks=blocks + [model.Figure(
|
||||
make=maker,
|
||||
caption="Cada punto es una observación situada por sus "
|
||||
"coordenadas; el recuadro rojo es el bounding box. La "
|
||||
"escala respeta la latitud (proyección equirectangular)."))
|
||||
"escala respeta la latitud (proyección equirectangular).")])]
|
||||
else:
|
||||
blocks.append(model.Note(
|
||||
"No se pudo construir el scatter geográfico a partir de las "
|
||||
|
||||
Reference in New Issue
Block a user