Source code for ridgeplot._hist
"""Utilities for binning samples into histograms."""
from __future__ import annotations
from typing import TYPE_CHECKING
import numpy as np
from ridgeplot._kde import normalize_sample_weights
if TYPE_CHECKING:
from ridgeplot._types import (
Densities,
DensityTrace,
Samples,
SamplesTrace,
SampleWeights,
SampleWeightsArray,
ShallowSampleWeightsArray,
)
[docs]
def bin_trace_samples(
trace_samples: SamplesTrace,
nbins: int,
weights: SampleWeights = None,
) -> DensityTrace:
trace_samples = np.asarray(trace_samples, dtype=float)
if not np.isfinite(trace_samples).all():
raise ValueError("The samples array should not contain any infs or NaNs.")
if weights is not None:
weights = np.asarray(weights, dtype=float)
if len(weights) != len(trace_samples):
raise ValueError("The weights array should have the same length as the samples array.")
if not np.isfinite(weights).all():
raise ValueError("The weights array should not contain any infs or NaNs.")
hist, bins = np.histogram(trace_samples, bins=nbins, weights=weights)
return [(float(x), float(y)) for x, y in zip(bins, hist)]
[docs]
def bin_samples(
samples: Samples,
nbins: int,
sample_weights: SampleWeightsArray | ShallowSampleWeightsArray | SampleWeights = None,
) -> Densities:
normalised_weights = normalize_sample_weights(sample_weights=sample_weights, samples=samples)
return [
[
bin_trace_samples(trace_samples, nbins=nbins, weights=weights)
for trace_samples, weights in zip(samples_row, weights_row, strict=True)
]
for samples_row, weights_row in zip(samples, normalised_weights, strict=True)
]