python - chart - Guarde una subtrama en matplotlib
title plt python (2)
Aplicando la función full_extent()
en una respuesta de @Joe 3 años después desde here , puede obtener exactamente lo que el OP estaba buscando. Alternativamente, puede usar Axes.get_tightbbox()
que da un cuadro delimitador un poco más estricto
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from matplotlib.transforms import Bbox
def full_extent(ax, pad=0.0):
"""Get the full extent of an axes, including axes labels, tick labels, and
titles."""
# For text objects, we need to draw the figure first, otherwise the extents
# are undefined.
ax.figure.canvas.draw()
items = ax.get_xticklabels() + ax.get_yticklabels()
# items += [ax, ax.title, ax.xaxis.label, ax.yaxis.label]
items += [ax, ax.title]
bbox = Bbox.union([item.get_window_extent() for item in items])
return bbox.expanded(1.0 + pad, 1.0 + pad)
# Make an example plot with two subplots...
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(range(10), ''b-'')
ax2 = fig.add_subplot(2,1,2)
ax2.plot(range(20), ''r^'')
# Save the full figure...
fig.savefig(''full_figure.png'')
# Save just the portion _inside_ the second axis''s boundaries
extent = full_extent(ax2).transformed(fig.dpi_scale_trans.inverted())
# Alternatively,
# extent = ax.get_tightbbox(fig.canvas.renderer).transformed(fig.dpi_scale_trans.inverted())
fig.savefig(''ax2_figure.png'', bbox_inches=extent)
Publicaba una foto, pero carezco de los puntos de reputación
¿Es posible guardar (a png) una subtrama individual en una figura matplotlib? Digamos que tengo
import pyplot.matplotlib as plt
ax1 = plt.subplot(121)
ax2 = plt.subplot(122)
ax1.plot([1,2,3],[4,5,6])
ax2.plot([3,4,5],[7,8,9])
¿Es posible guardar cada una de las dos subtramas en diferentes archivos o al menos copiarlos por separado a una nueva figura para guardarlos?
Estoy usando la versión 1.0.0 de matplotlib en RHEL 5.
Gracias,
Robert
Mientras que @Eli está bastante en lo cierto de que generalmente no hay mucha necesidad de hacerlo, es posible. savefig
toma un argumento bbox_inches
que se puede usar para guardar selectivamente solo una parte de una figura en una imagen.
Aquí hay un ejemplo rápido:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# Make an example plot with two subplots...
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(range(10), ''b-'')
ax2 = fig.add_subplot(2,1,2)
ax2.plot(range(20), ''r^'')
# Save the full figure...
fig.savefig(''full_figure.png'')
# Save just the portion _inside_ the second axis''s boundaries
extent = ax2.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
fig.savefig(''ax2_figure.png'', bbox_inches=extent)
# Pad the saved area by 10% in the x-direction and 20% in the y-direction
fig.savefig(''ax2_figure_expanded.png'', bbox_inches=extent.expanded(1.1, 1.2))
La figura completa:
Área dentro de la segunda subparcela:
El área alrededor de la segunda subparcela rellenó un 10% en la dirección xy un 20% en la dirección y: