Files
fn_registry/python/functions/datascience/plot_heatmap_log.py
egutierrez dabc945eda feat: extraccion masiva footprint_aurgi (41 funcs + 4 types + stack Docker geo)
Extrae al registry funciones del proyecto interno footprint_aurgi:
- core (6): slugify_ascii, normalize_for_join, cp_provincia_es, infer_provincia_from_cp, safe_read_csv_fallback, csv_to_parquet_duckdb
- geo puras (7): haversine_km, point_in_ring, point_in_polygon, point_in_polygons_bbox, polygon_bbox, extent_with_padding, distance_bucket
- geo I/O (4): load_geojson_polygons, load_boundary_gdf, add_basemap_osm, add_basemap_with_timeout
- valhalla client (4): valhalla_route, valhalla_isochrone, valhalla_isochrones_async, valhalla_matrix_1_to_n
- datascience stats (7): trimmed_mean, geometric_mean, detect_distribution_type, best_central_tendency, summary_stats, kde_density_levels, alpha_shape_concave_hull
- datascience fuzzy (3): fuzzy_merge_adaptive (rapidfuzz), words_to_dataset, remove_words_from_column
- datascience viz (2): plot_kde_2d, plot_heatmap_log
- infra (4): compress_pdf_ghostscript, render_table_page_pdfpages, add_header_logo, osm2pgsql_ingest
- pipelines (4): setup_geo_stack_docker, compute_centers_reachability, generate_isochrones_by_zone, count_points_per_zone
- types geo (4): LonLat, BBox, IsochroneRequest, Centro

Incluye:
- apps/footprint_geo_stack/ (PostGIS + Martin + Valhalla via docker-compose)
- 131/132 tests pasan (1 skip esperado: osm2pgsql en PATH)
- Issue tracker dev/issues/0052-footprint-aurgi-extraction.md
- Atribucion uniforme: source_repo internal:footprint_aurgi, source_license internal-aurgi
- Build con 9 agentes en paralelo (8 wave 1 + 1 wave 2 pipelines)

Tambien commitea trabajo previo no commiteado: aggregate_extraction_results, chunk_with_overlap, clean_pdf_text, merge_entity_aliases, extract_graph_gliner2, extract_relations_mrebel, extract_triples_spacy_es, gliner2/mrebel/marianmt/rebel/spacy_es load_model, parse_rebel_output, translate_es_to_en, issue 0050/0051.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 23:35:22 +02:00

54 lines
1.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Plot a log-scale 2D histogram heatmap on a matplotlib Axes."""
from __future__ import annotations
def plot_heatmap_log(
ax: "Axes",
xs: "list[float] | np.ndarray",
ys: "list[float] | np.ndarray",
extent: "tuple[float, float, float, float]",
bins: int = 200,
cmap: str = "hot",
alpha: float = 0.6,
) -> None:
"""Plot a log-scale 2D density heatmap using histogram binning.
Computes a 2D histogram over the given points within ``extent``, applies
log1p to compress the dynamic range, and renders the result as an image
overlay on the Axes.
Args:
ax: matplotlib Axes to draw on.
xs: X coordinates (longitude or projected x).
ys: Y coordinates (latitude or projected y).
extent: Bounding box as (minx, maxx, miny, maxy).
bins: Number of histogram bins along each axis. Default 200.
cmap: Matplotlib colormap name. Default "hot".
alpha: Opacity of the heatmap overlay (01). Default 0.6.
"""
import numpy as np # type: ignore
xs_arr = np.asarray(xs, dtype=float)
ys_arr = np.asarray(ys, dtype=float)
minx, maxx, miny, maxy = extent
counts, _xedges, _yedges = np.histogram2d(
xs_arr,
ys_arr,
bins=bins,
range=[[minx, maxx], [miny, maxy]],
)
log_counts = np.log1p(counts.T)
ax.imshow(
log_counts,
extent=[minx, maxx, miny, maxy],
origin="lower",
cmap=cmap,
alpha=alpha,
aspect="auto",
)