color python matplotlib

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..