Source code for spyndex.plot
from typing import Optional, Union
import numpy as np
import pandas as pd
import seaborn as sns
import spyndex
from .utils import _check_params, _get_indices
[docs]
def heatmap(index: str, x: str, y: str, params: Optional[dict] = None, online: bool = False, **kwargs):
"""Plot all posible index values as a color-encoded matrix.
Parameters
----------
index : str
Index to plot.
x : str
Band to plot in the x-axis.
y : str
Band to plot in the y-axis.
params: dict
Parameters for all remaining bands that are not used in :code:`x` nor :code:`y`.
This dictionary must store just float values.
online : bool, default = False
Whether to retrieve the most recent list of indices directly from the GitHub
repository and not from the local copy.
**kwargs : Keyword arguments
Keyword arguments that can be passed to :code:`seaborn.heatmap()`.
Returns
-------
Matplotlib Axes
Axes object with the index heatmap.
Examples
--------
>>> import spyndex
>>> spyndex.plot.heatmap("NDVI","N","R",cmap = "Spectral",annot = True)
If the index uses more than one band, the remaining bands or parameters must
be passed in the :code:`params` dictionary.
>>> spyndex.plot.heatmap(
... "SAVI",
... "N",
... "R",
... params = {"L": 0.5},
... cmap = "Spectral",
... annot = True)
"""
grid = np.round(np.mgrid[0:1.1:0.1, 0:1.1:0.1], 1)
X = grid[0].flatten()
Y = grid[1].flatten()
df = pd.DataFrame(
{
x: X,
y: Y,
}
)
if params is not None:
params = {**params, x: df[x], y: df[y]}
else:
params = {x: df[x], y: df[y]}
indices = _get_indices(online)
_check_params(index, params, indices)
df[index] = spyndex.computeIndex(index=index, params=params)
df = df.pivot(index=y, columns=x, values=index)
h = sns.heatmap(df, **kwargs)
h.invert_yaxis()
return h