Una guida completa agli assi inseriti in Matplotlib |  di Matthew Andrés Moreno |  Gennaio 2024

 | Intelligenza-Artificiale

Questa funzione semplifica l’aggiunta di inserti. Ecco come usarlo, inclusa una spiegazione del parametro “loc” per il posizionamento:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

fig, ax = plt.subplots(); ax.set_box_aspect(0.5) # main figure and axes
ax.plot((0, 9), (0, 9)) # example plot

# create inset axes & plot on them
inset_ax = inset_axes(ax, width="30%", height=1.2, loc="upper left")
inset_ax.plot((9, 0), (0, 9), color="r")
plt.xticks(()); plt.yticks(()) # strip ticks, which collide w/ main ax

Si noti che è possibile specificare la dimensione degli assi rispetto agli assi principali o dentro pollicicome mostrato qui con width E heightrispettivamente.

Codici di posizione supportati per loc sono come segue,

"upper right" | "upper left" | "lower left" | "lower right"
"right" | "center left" | "center right" | "lower center"
"upper center" | "center"

Matplotlib Axes la classe fornisce il file inset_axes funzione membro, che è un modo semplice per creare inserti relativi agli assi principali:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(); ax.set_box_aspect(0.5) # main figure and axes
ax.plot((0, 9), (0, 9)) # example plot

# create inset axes & plot on them
ins_ax = ax.inset_axes((.6, .15, .3, .3)) # (x, y, width, height) w.r.t. ax
ins_ax.plot((9, 0), (0, 9), color="r")

Le coordinate sono specificate rispetto agli assi principali, quindi, ad esempio, (0, 0, 0,5, 0,2) creerà un asse nell’angolo in basso a sinistra con una larghezza che occupa metà della larghezza degli assi e un’altezza che occupa 0,2 di altezza degli assi.

Per posizionare un inserto rispetto ad un asse genitore ax in termini di pollici, dobbiamo prima calcolare la dimensione degli assi genitori in pollici.

w_inch, h_inch = ax.figure.get_size_inches() * ax.get_position().size

Quindi, passa il tuo x, y, wE h in pollici a Axes.inset_axes come segue

ax.inset_axes((x/w_inch, y/h_inch, w/w_inch, h/h_inch))

Matplotlib Figure class fornisce un analogo add_axes funzione membro, che consente di posizionare gli inserti rispetto alla figura complessiva.

import matplotlib.pyplot as plt

fig, ax = plt.subplots(); ax.set_box_aspect(0.5) # main figure and axes
ax.plot((0, 9), (0, 9)) # example plot

# create inset axes & plot on them
ins_ax = fig.add_axes((.2, .5, .2, .2)) # (x, y, width, height) w.r.t. fig
ins_ax.plot((9, 0), (0, 9), color="r")

Analogamente a prima, le coordinate verranno specificate rispetto agli assi principali, quindi, ad esempio, (0,5, 0,5, 0,3, 0,2) creerà un asse 2/10 dell’altezza della figura complessiva e 3/10 della larghezza con l’asse inferiore angolo sinistro centrato all’interno della figura.

Per il prossimo esempio utilizzeremo il file fin dall’inizio libreria, che fornisce strumenti specializzati per lavorare con assi inseriti in matplotlib. Può essere installato come python3 -m pip install outset.

IL fin dall’inizio la biblioteca fornisce il flessibile outset.util.layout_corner_insets utilità per posizionare più assi inseriti all’interno di un angolo specificato di un asse principale. Ecco come usarlo per scegliere le posizioni a cui inviare le chiamate Axes.inset_axes.

import matplotlib.pyplot as plt
import outset

fig, ax = plt.subplots(); ax.set_box_aspect(0.5) # main figure and axes
ax.plot((0, 9), (0, 9)) # example plot

# ------ pick inset axes positions: 3 in upper left, one in lower right
inset_positions = outset.util.layout_corner_insets( # upper left positions
3, "NW", # number insets and corner to position in
# optional layout tweaks...
inset_pad_ratio=(.2,.35), inset_grid_size=(.6,.65), inset_margin_size=.05)
inset_positions.append( # generate lower right position & tack on to list
outset.util.layout_corner_insets(1, "SE", inset_grid_size=.4))

# ----- create inset axes & plot on them
inset_axes = (*map(ax.inset_axes, inset_positions)) # create inset axes
for iax in inset_axes: # example plot
iax.plot((9, 0), (0, 9), color="r")

Nota le personalizzazioni facoltative per il posizionamento degli inserti effettuate tramite argomenti di parole chiave outset.util.layout_corner_insets. Qui, “pad” si riferisce alla spaziatura tra gli inserti, “margine” si riferisce allo spazio tra gli inserti e gli assi principali e “dimensione della griglia” si riferisce alla frazione complessiva dello spazio degli assi in cui sono impilati gli inserti.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *