TheBird

heatmap.py

1.3 kB · python · 33 lines

1from mrlypy.core.colors import gradient2from mrlypy.two import Cell2d3import numpy as np4import os5from colors import create_heatmap_colors6from config import FORMAT7from models import Saga89def create_saga_heatmap(saga: Saga, output_dir: str) -> Saga:10    os.makedirs(output_dir, exist_ok=True)11    shape = saga.grids[0].types.shape12    cursor = 013    for seg, seg_len in zip(saga.segments, saga.segment_lengths):14        seg_grids = saga.grids[cursor:cursor + seg_len]15        final = np.zeros(shape, dtype=np.int32)16        for g in seg_grids:17            final += g.types18        max_count = max(1, int(np.max(final)))19        primary, secondary = create_heatmap_colors(seg)20        gradient_colors = gradient(secondary, max_count)21        gradient_colors.insert(0, primary)22        gradient_rgba = [c.to_rgba() for c in gradient_colors]23        gradient_array = np.array(gradient_rgba, dtype=np.uint8)24        cumulative = np.zeros(shape, dtype=np.int32)25        for i, grid in enumerate(seg_grids):26            cumulative += grid.types27            colored = gradient_array[cumulative]28            cell = Cell2d(colors=colored)29            image = cell.to_image(1).convert("RGB")30            image.save(f"{output_dir}/{saga.key}_{cursor + i + 1:03d}.{FORMAT}", format=FORMAT)31        cursor += seg_len32    print(f"heatmap {len(saga.grids)} -> {output_dir}")33    return saga