在 matplotlib 中保存图形时遇到问题
Have a problem with saving figures in matplotlib
我在保存数字时遇到问题。此代码对信号执行 FFT,之后应将 FFT 保存在 .png 中的单独文件中。第一个图没问题,但后面的图里有所有以前的FFT,也许这是一个典型的问题,你知道如何解决吗?
import numpy as np
import matplotlib.pyplot as plt
import glob
txt_files = glob.glob("*.pom") #format of files
print(txt_files)
for i in range(len(txt_files)):
mat = np.genfromtxt(txt_files[i])
#x = np.delete(mat, [0, 6] , axis=0)
a = np.delete(mat, 0, axis=1)
b = mat[1, 0] - mat[0, 0]
std = a.std()
mean = a.mean()
print(std, mean)
Fs = 5000 # sumpling freq IF TIME IN FIRST COLUMN
tstep = 1 / Fs # sumple time interval
N = np.size(a) # number of samples
t = np.linspace(0, (N - 1) * tstep, N) # time step
fstep = Fs / N
f = np.linspace(0, (N - 1) * fstep, N) # freq step
X = np.fft.fft2(a)
X_mag = np.abs(X) / N
f_plot = f[0:int(N / 2 + 1)]
X_mag_plot = 2 * X_mag[0:int(N / 2 + 1)]
X_mag_plot[0] = X_mag_plot[0] / 2
plt.plot(f_plot, X_mag_plot, "-k", linewidth=0.5)
plt.xlabel('Frequency [Hz]')
plt.ylabel('Amplitude')
plt.xscale("log")
plt.axis([1, 1000, 0, 0.01])
plt.grid(True)
#plt.text(45, .025, r'$\mu=100,\ \sigma=15$', backgroundcolor="w")
plt.text(300, 0.01, f'std={std:.3f} \nmean={mean:.3f}', backgroundcolor="w")
#plt.show()
np.savetxt(txt_files[i] + "_Widmo.txt", X_mag_plot, delimiter="\t")
plt.savefig(txt_files[i] + ".png", dpi=250)
if i == 1:
np.savetxt(txt_files[0] + "_Fs.txt", f_plot, delimiter="\t")
del f_plot
del X_mag_plot
del txt_files[i]
我认为问题在于您继续在同一个图形中工作。尝试执行以下操作之一:
在循环的每次迭代中打开一个新图窗。这不是最佳选择,因为您可能会打开很多数字:
plt.figure()
另一种更优的选择是在每次迭代中保存图形后将其关闭:
plt.close('all')
我在保存数字时遇到问题。此代码对信号执行 FFT,之后应将 FFT 保存在 .png 中的单独文件中。第一个图没问题,但后面的图里有所有以前的FFT,也许这是一个典型的问题,你知道如何解决吗?
import numpy as np
import matplotlib.pyplot as plt
import glob
txt_files = glob.glob("*.pom") #format of files
print(txt_files)
for i in range(len(txt_files)):
mat = np.genfromtxt(txt_files[i])
#x = np.delete(mat, [0, 6] , axis=0)
a = np.delete(mat, 0, axis=1)
b = mat[1, 0] - mat[0, 0]
std = a.std()
mean = a.mean()
print(std, mean)
Fs = 5000 # sumpling freq IF TIME IN FIRST COLUMN
tstep = 1 / Fs # sumple time interval
N = np.size(a) # number of samples
t = np.linspace(0, (N - 1) * tstep, N) # time step
fstep = Fs / N
f = np.linspace(0, (N - 1) * fstep, N) # freq step
X = np.fft.fft2(a)
X_mag = np.abs(X) / N
f_plot = f[0:int(N / 2 + 1)]
X_mag_plot = 2 * X_mag[0:int(N / 2 + 1)]
X_mag_plot[0] = X_mag_plot[0] / 2
plt.plot(f_plot, X_mag_plot, "-k", linewidth=0.5)
plt.xlabel('Frequency [Hz]')
plt.ylabel('Amplitude')
plt.xscale("log")
plt.axis([1, 1000, 0, 0.01])
plt.grid(True)
#plt.text(45, .025, r'$\mu=100,\ \sigma=15$', backgroundcolor="w")
plt.text(300, 0.01, f'std={std:.3f} \nmean={mean:.3f}', backgroundcolor="w")
#plt.show()
np.savetxt(txt_files[i] + "_Widmo.txt", X_mag_plot, delimiter="\t")
plt.savefig(txt_files[i] + ".png", dpi=250)
if i == 1:
np.savetxt(txt_files[0] + "_Fs.txt", f_plot, delimiter="\t")
del f_plot
del X_mag_plot
del txt_files[i]
我认为问题在于您继续在同一个图形中工作。尝试执行以下操作之一:
在循环的每次迭代中打开一个新图窗。这不是最佳选择,因为您可能会打开很多数字:
plt.figure()
另一种更优的选择是在每次迭代中保存图形后将其关闭:
plt.close('all')