我想绘制一个网格图。通常它大约是 9-12 个地块,但目前我只玩 3 个。
我正在使用这段代码。这可能不是最好的,但我只是在玩。
def plot(config):
# specify grid
nprops = 3
ncols = nprops # Number of props you want to plot
nrows = len(config["number_of_steps"]) # rows
# plot experiments
for integration_type in config["integration_types"]:
for atoms in config["number_of_atoms"]:
fig = plt.figure()
#plt.tight_layout()
#plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=0.42)
i = 1
title = f'{config["title"]} - {atoms} atoms - integration_type={integration_type}'
fig.suptitle(title)
for steps in config["number_of_steps"]:
filename = f"params_{integration_type}_{atoms}_{steps}"
# Get properties from output file
props = get_all_properties(f"out/{filename}.out")
# Plot total Energy
ax = fig.add_subplot(nrows, ncols, i)
ax.plot(props["step"], props["etot"], label="Etot")
plt.title(f"{atoms} atoms, {steps} steps")
ax.legend()
ax.set_ylabel('Etot')
ax.set_xlabel('Step')
i += 1
# Plot kinetic Energy
ax = fig.add_subplot(nrows, ncols, i)
ax.plot(props["step"], props["ekin"], label="Ekin")
plt.title(f"{atoms} atoms, {steps} steps")
ax.legend()
ax.set_ylabel('Ekin')
ax.set_xlabel('Step')
i += 1
# Plot potential Energy
ax = fig.add_subplot(nrows, ncols, i)
ax.plot(props["step"], props["epot"], label="Epot")
plt.title(f"{atoms} atoms, {steps} steps")
ax.legend()
ax.set_ylabel('Epot')
ax.set_xlabel('Step')
i += 1
plt.legend()
plt.savefig(f"out/params_{integration_type}_{atoms}_{steps}.png", dpi=fig.dpi)
plt.show()
我在标签模式下使用 3。所以 show() 在我的 13" 2k 笔记本屏幕上基本上是全屏的。我知道 wm 基本上会调整图像的大小,但我想我可以通过传递dpi=fig.dpi
给 savefig() 函数来解决这个问题,但正如你所看到的,它似乎没有去工作。
知道如何让它正常工作吗?
编辑:我想补充:如果我有 9-12 个图,即使在我用 subplot_adjust() 注释掉的 show() 中,标签也可能重叠。如果有更好的方法来制作这样的网格,我很高兴听到它。