0

我想绘制一个网格图。通常它大约是 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()

show() 函数向我展示了这一点: 在此处输入图像描述

而 savefig() 函数向我展示了这一点: 在此处输入图像描述

我在标签模式下使用 3。所以 show() 在我的 13" 2k 笔记本屏幕上基本上是全屏的。我知道 wm 基本上会调整图像的大小,但我想我可以通过传递dpi=fig.dpi给 savefig() 函数来解决这个问题,但正如你所看到的,它似乎没有去工作。

知道如何让它正常工作吗?

编辑:我想补充:如果我有 9-12 个图,即使在我用 subplot_adjust() 注释掉的 show() 中,标签也可能重叠。如果有更好的方法来制作这样的网格,我很高兴听到它。

4

0 回答 0