2015-11-26 179 views
1

我有一个相当简单的情节,突然开始发疯后,我改变了后端的东西,为另一个项目使用seaborn错误使得它有必要改变后端正确的结果。Matplotlib剧情搞砸了

但是,我一定做了一些改变了完全绘制地块的方式,因为我的地块的框架现在已经消失了,并且地块的背景也是如此。这是两张图(数据不同,没有“好人”的所有备份),左边是它应该看起来像的样子,右边是当前。

我改变的唯一的事情就是运行命令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

+0

有没有人,有一个线索什么尝试?我尝试过正常情节,他们都很好。我真的试图以任何方式剥离改变情节的所有命令,所以就我所见,只剩下不同的设置,例如后端等,这可能是错误。 任何提示我应该在哪里看下? – Tobias

+0

试试'export MPLBACKEND =“TkAgg”' – oliversm

回答

0

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

为什么进口seaborn要改变所有的图我不明白,但我现在知道要更加小心,我把我的进口...

0

至于我可以看到,该地块之间的唯一区别是,在左侧框显示和隐藏在右侧。我不确定seaborn是做什么的,但看起来你已经改变了这些参数的默认设置。 您可以用plt.box('off')/plt.box('on')明确打开和关闭框。对于图例,您可以传递参数frameon = True/False

编辑: 尝试以下方法:找到你的rcparams文件(matplotlib.matplotlib_fname())。将以下行粘贴到其中:

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

重新运行您的脚本。

+0

对不起,我可能不太清楚。我在后台使用了seaborn的不同情节进行了更改。不过,对于这个例子,我使用纯粹的matplotlib.pyplot。我添加了一个新的图表,显示问题可能会更好。问题在于背景是灰色的,并且当我将额外的轴添加到右侧时,出现某些原因出现奇怪的白色线条。 请忽略该数据本身,我没有相同的数据集来再现“原始”工作图。灰色背景,缺失的框架和灰色背景中的奇数白色条纹是问题所在。 – Tobias

+0

好的,你做的事情必须改变数字的默认设置。请参阅已编辑的答案。 – thomas

+0

我试过了,它确实将图块背景颜色还原成白色,但是图块的框架仍然消失。 我还注意到了情节之间的另一个区别:蜱从“失败”情节中的盒子向外指出,但是在“好”情节中向内。这可能会让问题更加明白吗? – Tobias