Matplotlib情节搞砸了

时间:2015-11-26 01:22:43

标签: python matplotlib backend

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

然而,我必须做一些改变完全绘制方式的东西,因为不知何故,我的情节框架现在已经消失,情节的背景也是如此。这里有两个图(数据不同,没有"好的")的所有备份,左边是它看起来的样子,右边是当前。

我唯一改变的是运行命令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()

Correct plot Faulty plot

2 个答案:

答案 0 :(得分:0)

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

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

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

重新运行你的剧本。

答案 1 :(得分:0)

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

为什么导入seaborn应该更改我无法理解的所有情节,但我现在知道要更加小心我的进口位置......