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_axesfig, 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 height
rispettivamente.
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 pltfig, 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
, w
E 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 pltfig, 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 outsetfig, 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