Python >> Tutorial de Python >  >> Python Tag >> Matplotlib

Cómo eliminar el marco de matplotlib (pyplot.figure vs matplotlib.figure) (frameon=False Problematic in matplotlib)

ax.axis('off') , como señaló Joe Kington, eliminará todo excepto la línea trazada.

Para aquellos que solo desean eliminar el marco (borde) y mantener las etiquetas, teletipos, etc., pueden hacerlo accediendo a los spines objeto en el eje. Dado un objeto eje ax , lo siguiente debería eliminar los bordes en los cuatro lados:

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

Y, en caso de eliminar x y y marcas de la trama:

 ax.get_xaxis().set_ticks([])
 ax.get_yaxis().set_ticks([])

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 ejemplo, fig.savefig('blah.png', transparent=True) ).

Sin embargo, para eliminar el fondo de los ejes y las figuras en la pantalla, deberá configurar ambos ax.patch y fig.patch ser invisible

Por ejemplo

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10))

for item in [fig, ax]:
    item.patch.set_visible(False)

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)

(Por supuesto, no se nota la diferencia en el fondo blanco de SO, pero todo es transparente...)

Si no desea mostrar nada más que la línea, apague el eje también usando ax.axis('off') :

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10))

fig.patch.set_visible(False)
ax.axis('off')

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)

Sin embargo, en ese caso, es posible que desee hacer que los ejes ocupen la figura completa. Si especifica manualmente la ubicación de los ejes, puede indicarle que ocupe la figura completa (alternativamente, puede usar subplots_adjust , pero esto es más simple para el caso de un solo eje).

import matplotlib.pyplot as plt

fig = plt.figure(frameon=False)
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.plot(range(10))

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)


La forma más fácil de deshacerse del marco feo en las versiones más nuevas de matplotlib:

import matplotlib.pyplot as plt
plt.box(False)

Si realmente debe usar siempre el enfoque orientado a objetos, entonces haga:ax.set_frame_on(False) .