簡體   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