我有一个主脚本和一个带有函数的库。这个想法是,从一些数据中,它生成一个图形表示并将图形的图像保存在 .png 中一切正常,除了它生成的 .png 图像是空白图像。此外,在显示图表后,控制台会告诉我:
matplotlib.figure.Figure 在 0xc8f37b8
主脚本:
import f02_graphs as gr
y = [1, 7, 3, 4]
x = [0, 1, 2, 3]
d = "Z:\Trabajos\Python 3\proyectos\p00_banco_de_pruebas"
gr.one_line(x, y, save=d, title='Kosovo')
库函数:
import matplotlib.pyplot as plt
def one_line(x, y, show=True, save=False, title="Title", xlab="Abscissa",
ylab="Ordinate"):
# Representa con una linea la lista de datos pasada como parametro.
#
# x: almacena los datos de la coordenada x.
# show: determina si se muestra la grafica por pantalla.
# save: almacena el directorio para guardar la grafica como una
# imagen. Si su valor es None, no se guarda la imagen.
# title: titulo de la grafica.
# xlab: etiqueta del eje x.
# ylab: etiqueta del eje y.
#
# Creamos la grafica.
plt.figure()
# Dibujamos la representacion de los datos.
plt.plot(x, y)
# Añadimos el titulo.
plt.title(title)
# Añadimos las etiquetas a los ejes.
plt.xlabel(xlab)
plt.ylabel(ylab)
# Añadimos una rejilla.
plt.grid(True)
# Ajustamos los ejes a la zona con datos.
plt.axis('tight')
#
# Mostramos la imagen de la grafica por pantalla.
if show:
plt.show()
#
# Guardamos la imagen en un directorio introducido por el usuario.
if save:
plt.savefig('dragon.png')
但是,如果我不调用该函数,而是在主脚本中执行所有操作,则可以毫无问题地保存。但我想通过调用库中的函数来做到这一点。
我怎么解决这个问题?
PS:我使用 Spyder 3
Matplotlib 将图形和轴“当前”视为尚未使用
show
. 当它被调用plt.show()
时,所有等待显示的东西都会被重置,创建一个新的空白图形。不知道你有没有注意到,如果你不显示这个数字,它就会被正确保存。我们可以在官方文档中找到关于它的通知:我们可以这样翻译:
要解决问题,您可以:
通过颠倒条件句的顺序,先调用 a
plt.savefig
,然后调用 a 。plt.show
或者使用变量来存储对
matplotlib.figure.Figure
要保存的实例的引用:只需颠倒
if
. 并添加保存图像的路径。例如:代替
写: