python 使用重复绘图时绘图会创建灰色框

python plot creates gray box when using repeating plot

我遇到了一些可笑的事情,不知道该怎么办

在我的应用程序中,我需要处理一些独立的数据块,并为每个数据块创建一个散点图并保存到一个文件以及热图并保存到另一个文件

因此,当我绘制第一块数据时 - 一切正常。

当我转到第 2 个时出现了一些问题,它没有为干净的背景创建一个带有灰色框的散点图背景!这让我的可视化数据非常混乱。

下面是一个简化的例子

def test_visual():
    for k in range(0, 3):
        fig = plt.figure()
        ax = fig.add_subplot(111)  # The big subplot
        ax.set_aspect('equal', adjustable='box')

        plt.sca(ax)

        pairs_all = pd.DataFrame({'x': pd.Series(np.zeros(500), dtype=int), 'y': pd.Series(np.zeros(500), dtype=int)})
        sns.scatterplot(data=pairs_all, x="x", y="y", ax=ax, s=0.15)
        # plt.legend([], [], frameon=False)

        ax.legend(loc='upper left', markerscale=0.2, bbox_to_anchor=(1.04, 1), fontsize=2)
        ax.set_xlim(0, 100)
        ax.set_ylim(0, 100)

        # ax.set_xticklabels(ax.get_xticklabels(), fontsize = 4)
        # ax.set_yticklabels(ax.get_yticklabels(), fontsize = 4)

        plt.xticks(np.arange(0, 100 + 1, 5), fontsize=2 )
        plt.yticks(np.arange(0, 100 + 1, 5), fontsize=2 )

        ax.set_xlabel("")
        ax.set_ylabel("")

        fig.tight_layout()

        output_png = '{}_{}.png'.format('file1', k)
        plt.savefig(output_png, dpi=2400, bbox_inches='tight')
        fig.clear()
        plt.close(fig)

        fig = plt.figure()
        ax_w = fig.add_subplot(111)  # The big subplot
        # ax_w.set_aspect('equal', adjustable='box')

        plt.sca(ax_w)

        sns.set(font_scale=0.5)
        sns.heatmap(np.zeros((100, 100)), cbar_kws={'label': 'Energy'}, ax=ax_w, cmap='plasma')

        ax_w.set_xlim(0, 100)
        plt.xticks(fontsize=3)
        plt.yticks(fontsize=3)

        # ax_w.set_title(description, fontweight='bold', fontsize=4)

        fig.tight_layout()

        output_png = '{}_{}.png'.format('file2', k)
        plt.savefig(output_png, dpi=2400, bbox_inches='tight')
        fig.clear()
        plt.close(fig)

这是第一个 运行(文件 file1_0.png)的样子

这就是第二个 运行(文件 file1_1.png)的样子

重要提示,如果不绘制热图,问题就消失了。

那么,这是可视化库中的错误还是我需要以某种方式调整我的代码?

当您执行 sns.set(font_scale=0.5) 时,seaborn 会更改某些控制 matplotlib 图外观的 matplotlib rc 参数。特别是,默认情况下它会更改背景颜色并在所有随后创建的图上显示网格。您可以通过删除此行并使用上下文管理器临时设置 rc 参数来避免它:

with sns.plotting_context(rc={"font.size": 5.0}):
    sns.heatmap(np.zeros((100, 100)),
                cbar_kws={'label': 'Energy'},
                ax=ax_w,

或者,在绘制热图后,您可以调用 matplotlib.rc_file_defaults() 来恢复原始的 matplotlib rc 参数。