Para eliminar el marco en la figura, escribo
frameon=False
funciona perfectamente con pyplot.figure
, pero con matplotlib.Figure
eso solo elimina el fondo gris, el marco permanece. Además, solo quiero que se muestren las líneas, y todo el resto de la figura sea transparente.
con pyplot puedo hacer lo que quiera, quiero hacerlo con matplotlib por alguna larga razón que prefiero no mencionar para extender mi pregunta.
python
matplotlib
Emmet B
fuente
fuente
savefig
? (Si es así, anula lo que configuró al guardar la figura). ¿Funciona la configuración manualfig.patch.set_visible(False)
?Respuestas:
En primer lugar, si está utilizando
savefig
, tenga en cuenta que anulará el color de fondo de la figura al guardar a menos que especifique lo contrario (por ejemplofig.savefig('blah.png', transparent=True)
).Sin embargo, para eliminar el fondo de los ejes y la figura en la pantalla, deberá configurar ambos
ax.patch
yfig.patch
ser invisible.P.ej
(Por supuesto, no se puede ver la diferencia en el fondo blanco de SO, pero todo es transparente ...)
Si no desea mostrar nada más que la línea, apague también el eje usando
ax.axis('off')
:En ese caso, sin embargo, es posible que desee hacer que los ejes ocupen la figura completa. Si especifica manualmente la ubicación de los ejes, puede indicarle que tome la cifra completa (alternativamente, puede usar
subplots_adjust
, pero esto es más simple para el caso de un solo eje).fuente
ax.axis('off')
(también necesitará desactivar el marco de la figura también).ax.set_yticklabels(('G1', 'G2', 'G3'))
print_png()
lanza unaTypeError: write() argument must be str, not bytes
excepción para mí en Python 3. Abrir el archivo en formato binario de escritura ('wb'
) que se necesita para que funcione.ax.axis('off')
, como señaló Joe Kington, eliminará todo excepto la línea trazada.Para aquellos que desean eliminar solo el marco (borde) y mantener etiquetas, tickers, etc., uno puede hacerlo accediendo al
spines
objeto en el eje. Dado un objeto de ejeax
, lo siguiente debería eliminar los bordes en los cuatro lados:Y, en caso de eliminar
x
yy
marcar de la trama:fuente
ax.yaxis.set_ticks_position('left') ax.xaxis.set_ticks_position('bottom')
La forma más fácil de deshacerse del marco feo en las versiones más recientes de matplotlib:
Si realmente debe utilizar siempre el enfoque orientado a objetos, y luego hacer:
ax.set_frame_on(False)
.fuente
ax.set_frame_on(False)
, que hace lo mismo. Tal vez incluir en la respuesta anterior.A partir de la excelente respuesta de @peeol , también puede eliminar el marco haciendo
Para dar un ejemplo (el ejemplo de código completo se puede encontrar al final de esta publicación), supongamos que tiene un diagrama de barras como este,
puede eliminar el marco con los comandos anteriores y luego mantener las etiquetas
x-
yytick
(el gráfico no se muestra) o eliminarlas tambiénEn este caso, uno puede etiquetar las barras directamente; la trama final podría verse así (el código se puede encontrar a continuación):
Aquí está todo el código que es necesario para generar las parcelas:
fuente
Como respondí aquí , puede eliminar las espinas de todas sus parcelas a través de la configuración de estilo (hoja de estilo o rcParams):
fuente
Problema
Tuve un problema similar al usar ejes. El parámetro de clase es
frameon
pero el kwarg esframe_on
. axes_api>>> plt.gca().set(frameon=False)
AttributeError: Unknown property frameon
Solución
frame_on
Ejemplo
fuente
Yo solía hacerlo:
fuente
Para eliminar el marco del gráfico
Espero que esto funcione
fuente
fuente
debería hacer el truco.
fuente
plt.savefig tiene esas opciones en sí mismo, solo necesita desactivar los ejes antes
fuente