color - plt.figure python
Cómo eliminar el marco de matplotlib(pyplot.figure vs matplotlib.figure)(frameon=Falso problema en matplotlib) (5)
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 los antecedentes de los ejes y las figuras en la pantalla, deberá establecer tanto ax.patch
como fig.patch
para que sean invisibles.
P.ej
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 puede ver la diferencia en el fondo blanco de SO, pero todo es transparente ...)
Si no desea mostrar otra cosa que no sea la línea, apague el eje también utilizando 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)
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).
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)
Para quitar el marco en la figura, escribo
frameon=False
funciona perfecto con pyplot.figure
, pero con matplotlib.Figure
solo elimina el fondo gris, el marco se mantiene. Además, solo quiero que se muestren las líneas y que el resto de la figura sea transparente.
con pyplot puedo hacer lo que quiero, quiero hacerlo con matplotlib por alguna razón larga que prefiero no mencionar para ampliar mi pregunta.
Yo solía hacerlo:
from pylab import *
axes(frameon = 0)
...
show()
ax.axis(''off'')
, como señaló Joe Kington, eliminar todo excepto la línea trazada.
Para aquellos que solo quieran quitar el marco (borde), y mantener las etiquetas, los tickers, etc., uno puede hacer eso accediendo al objeto de spines
en el eje. Dado un eje objeto 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 tics x
e y
de la trama:
ax.get_xaxis().set_ticks([])
ax.get_yaxis().set_ticks([])
Aprovechando la excelente respuesta de @ peeol , también puedes eliminar el marco haciendo
for spine in plt.gca().spines.values():
spine.set_visible(False)
Para dar un ejemplo (la muestra del código completo se puede encontrar al final de esta publicación), digamos que tienes un diagrama de barras como este,
puede eliminar el marco con los comandos de arriba y luego mantener las etiquetas x-
y ytick
(no se muestra el gráfico) o eliminarlas también.
plt.tick_params(top=''off'', bottom=''off'', left=''off'', right=''off'', labelleft=''off'', labelbottom=''on'')
En este caso, uno puede etiquetar las barras directamente; la última trama podría verse así (el código se puede encontrar a continuación):
Aquí está el código completo que es necesario para generar las tramas:
import matplotlib.pyplot as plt
import numpy as np
plt.figure()
xvals = list(''ABCDE'')
yvals = np.array(range(1, 6))
position = np.arange(len(xvals))
mybars = plt.bar(position, yvals, align=''center'', linewidth=0)
plt.xticks(position, xvals)
plt.title(''My great data'')
# plt.show()
# get rid of the frame
for spine in plt.gca().spines.values():
spine.set_visible(False)
# plt.show()
# remove all the ticks and directly label each bar with respective value
plt.tick_params(top=''off'', bottom=''off'', left=''off'', right=''off'', labelleft=''off'', labelbottom=''on'')
# plt.show()
# direct label each bar with Y axis values
for bari in mybars:
height = bari.get_height()
plt.gca().text(bari.get_x() + bari.get_width()/2, bari.get_height()-0.2, str(int(height)),
ha=''center'', color=''white'', fontsize=15)
plt.show()
for spine in plt.gca().spines.values():
spine.set_visible(False) #Indentation updated..