繁体   English   中英

将多个绘图保存为一张图像

[英]Saving multiple plots as one image

我有这个代码来生成三个图。 代码运行良好,并按照我想要的方式生成所有三个图。 然而,当我试图保存绘图时,我得到的只是最后一个绘图的图像,它是 G0 的绘图,而不是一个接一个显示的绘图的图像。 我尝试使用plt.show()而不是使用plt.savefig()plt.figure ,但这会返回一个白色(空白)图像。 有人可以帮忙吗?

import numpy as np import matplotlib.pylab as plt
def planks_law(wave, T):
    h = 6.626e-34
    c = 3e8
    k = 1.38e-23
    bb = (2*h*c**2)/(wave**5)* (1/(np.exp((h*c)/(wave*k*T)-1)))
    return bb

b0 = np.genfromtxt("filename.txt") plt.plot(b0[:, 0]*1e-10,b0[:, 1],label='B0 Data')
bb_b0 = planks_law(b0[:,0]*1e-10, 30000)
scale_bb = np.trapz(b0[:,1],b0[:,0]*1e-10) / np.trapz(bb_b0,b0[:,0]*1e-10)
bb_b0_scaled = bb_b0 * scale_bb
plt.plot(b0[:,0]*1e-10, bb_b0_scaled,label='B0 Theoretical')
plt.xlabel('Wavelength [m]') plt.ylabel('I(λ,T)') 
plt.title('Blackbody Curve Fit to Known Spectra')
plt.legend(loc='upper right')
plt.savefig('filename.jpg') 
plt.figure()

f0 = np.genfromtxt("filename.txt") plt.plot(f0[:, 0]*1e-10,f0[:, 1],label='F0 Data')
bb_f0 = planks_law(f0[:,0]*1e-10, 7200)
scale_bb = np.trapz(f0[:,1],f0[:,0]*1e-10) / np.trapz(bb_f0,f0[:,0]*1e-10)
bb_f0_scaled = bb_f0 * scale_bb
plt.plot(f0[:,0]*1e-10, bb_f0_scaled,label='F0 Theoretical')
plt.xlabel('Wavelength [m]') plt.ylabel('I(λ,T)')
plt.legend(loc='lower right')

plt.savefig('filename.jpg') 
plt.figure()

g0 = np.genfromtxt("filename.txt") plt.plot(g0[:, 0]*1e-10,g0[:, 1],label='G0 Data')
bb_g0 = planks_law(g0[:,0]*1e-10, 6000)
scale_bb = np.trapz(g0[:,1],g0[:,0]*1e-10) / np.trapz(bb_g0,g0[:,0]*1e-10)
bb_g0_scaled = bb_g0 * scale_bb
plt.plot(g0[:,0]*1e-10, bb_g0_scaled,label='G0 Theoretical')
plt.xlabel('Wavelength [m]') plt.ylabel('I(λ,T)')
plt.legend(loc='lower right')

plt.figure()
plt.savefig('filename.jpg')

我本质上想要作为附加图像获得的内容。 在此处输入图片说明

你需要使用subplots

您可以像这样垂直堆叠两个图

fig, axs = plt.subplots(2)
fig.suptitle('Vertically stacked subplots')
axs[0].plot(x, y)
axs[1].plot(x, -y)

然后当您保存绘图时,您将在同一图像中拥有所有三个绘图。

在此处阅读有关子图的更多信息

您正在绘制分隔数字,这就是为什么您只能单独保存它们。 尝试使用子图绘制单个图形。 有两种选择:

  1. 使用“状态机”接口, plt.subplot(#rows, #cols, plot id)
import matplotlib.pyplot as plt 

plt.figure(figsize=(adjust size), **other_fig_args) 

plt.subplot(3, 1, 1)
plt.plot(...) # top plot

plt.subplot(3, 1, 2)
plt.plot(...) # middle plot


plt.subplot(3, 1, 3)
plt.plot(...) # bottom plot

plt.savefig(...)  # will now save all plots

  1. 使用“面向对象”界面plt.subplots(#rows, #cols, figsize=(adjust size), **other_fig_args)

fig, axes = plt.subplots(3, 1, figsize=(adjust size), **other_fig_args)
axes[0].plot(...) # top plot
axes[1].plot(...) # middle plot
axes[2].plot(...) # bottom plot

plt.savefig(...)  # will now save all plots

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM