Matplotlib 图搞砸了

Matplotlib plots messed up

我有一个相当简单的情节,在我为另一个使用 seaborn 的项目更改后端后突然开始变得疯狂,其中一个错误使得必须更改后端以获得正确的结果。

但是,我一定做了一些完全改变情节制作方式的事情,因为不知何故,我的情节框架现在消失了,情节的背景也不见了。这里有两个图(数据不同,没有 "good ones" 的所有备份),左边是它应该看起来的样子,右边是当前的样子。

我唯一改变的是 运行 命令 export MPLBACKEND="module://WXAgg"。从那以后,我重新启动了计算机,甚至重新安装了 matplotlib 以查看是否可以解决问题。但它仍然是一样的。

任何帮助将不胜感激,我相信这只是我的经验不足才使这个问题看起来如此难以解决...

编辑 我继续看这个,但仍然找不到解决办法。这似乎不是我对后端的修改,但我不知道还有什么可怪的。我已经将我的脚本恢复到我知道没有问题的旧版本,并且我 运行 在另一台计算机上的脚本,没有任何问题!

这是当前浓缩状态的脚本:

import matplotlib
matplotlib.use('pdf')
import matplotlib.pyplot as plt

def ColumnDensity_withTimeList(inputdirs, species_list, model_data, abundances, times_list, parameter_label, plot_dir, style, single_plots, column_density_limit):

for s in range(0, len(species_list)):
    for d in range(0, len(inputdirs)):
        patches     = []
        radii       = model_data[d]['radii'][:,0]
        f, ax       = plt.subplots(1,1)

        for t in range(0, len(times_list)):

            ax.loglog(radii, abundances, color='black')
            ax.grid(b=True, which='major', color='lightgray', linestyle='--')
            f.subplots_adjust(right=0.75)
            ax2 =   ax.twinx()
            ax2.semilogy(radii, model_data[d]['temperatures'], 'r--')
            ax2.set_ylabel('Temperature [K]', color='r')
            for tl in ax2.get_yticklabels():
                tl.set_color('r')

            ax3 =   ax.twinx()
            ax3.set_frame_on(True)
            ax3.patch.set_visible(False)
            ax3.spines['right'].set_position(('axes', 1.2))
            ax3.semilogy(radii, model_data[d]['densities'], 'b--')
            ax3.set_ylabel('Density [cm-3]', color='b')
            for tl in ax3.get_yticklabels():
                tl.set_color('b')

            plt.savefig(filename + ".pdf")
            plt.close()

据我所知,这些图之间的唯一区别是左侧的框在右侧显示和隐藏。我不确定 seaborn 做了什么,但似乎您所做的某些事情更改了这些参数的默认设置。 您可以使用 plt.box('off')/plt.box('on') 显式打开和关闭这些框。对于图例,您可以传递参数 frameon = True/False.

编辑: 请尝试以下操作:找到您的 rcparams 文件 (matplotlib.matplotlib_fname())。将以下行粘贴到其中:

axes.facecolor:white      
axes.edgecolor:black
legend.frameon: True

重新运行您的脚本。

在解决了很多问题之后,我发现实际上是 import seaborn 导致了我的问题。如果我把它移到使用它的地方,它可以不影响其他地方,我的问题就解决了。

为什么导入 seaborn 会改变所有我无法理解的情节,但我现在知道在放置导入的位置时要更加小心...