2014-09-26 47 views
1

我在用TkAgg后端解决matplotlib数字大小时遇到​​了问题。matplotlib:用TkAgg后端解决数字大小问题

首先,让我证明我可以增加一个数字的大小。运行下面的代码后,

import matplotlib as mpl 
mpl.use('TkAgg') 
import matplotlib.pyplot as plt 
plt.ion() 
fig = plt.figure(figsize = [2, 8]) 
fig.set_size_inches([8,8], forward = True) 
fig.canvas.draw() 
print fig.get_size_inches() 

fig.get_size_inches()打电话给[ 8, 7.475]。这有点烦人,我得到7.475而不是8,但我可以处理。接下来,当我运行下面的代码

import matplotlib as mpl 
mpl.use('TkAgg') 
import matplotlib.pyplot as plt 
plt.ion() 
fig = plt.figure(figsize = [8, 8]) 
fig.set_size_inches([2,8], forward = True) 
fig.canvas.draw() 
print fig.get_size_inches() 

然后fig.get_size_inches()打电话给[ 6, 7.475]。减少到62相差甚远。请注意,交互模式必须打开。如果我关闭交互模式(plt.ioff()),则TkAgg后端会给出[8, 8][2, 8],但数字窗口的形状看起来更像[8, 7.475][6, 7.475]

如果我切换到Qt4Agg后端,问题就消失了。不幸的是,我不能让Qt4Agg后端与Spyder一起工作。我在Preferences - > Console - > external modules - > GUI backend中将Qt4Agg设置为后端,然后重新启动Spyder。致电mpl.get_backend()的电话将返回MacOSX

我想要一个与Spyder配合使用的后端,可以让我强制将数字窗口置于所有其他窗口之上(请参阅this post),并允许我随意更改数字窗口大小。

万一它很重要,我正在运行matplotlib 1.3.1和Enthought Canopy Python 2.7.6。

更新:我得到了Qt4Agg后端与Spyder一起工作。如果今天晚上没有人发布解决方案让TkAgg后端正常工作,那么我会发布如何将Qt4Agg与Spyder一起使用。

+0

我没有看到任何错误。运行你的代码片段会导致'[10。 10.]'和'[2。 10.]',分别。我正在使用matplotlib 1.2.1和python 2.7.5+。 – 2014-09-26 09:10:47

+0

@TheDude,感谢您的评论。它迫使我进一步检查我的设置。我在Spyder上运行,它具有交互模式。如果交互模式关闭,则TkAgg后端报告“[10。10.]'和'[2。 '],尽管数字窗口大小仍然是错误的。我还发现问题不会发生在所有后端。最后,我将数字窗口大小从[10,10]改为[8,8],以确保我的小型笔记本电脑屏幕不会从10到9.475轻微降低。我原来的帖子已经更新了这些发现。 – Stretch 2014-09-26 14:26:53

回答

0

那么,也许不可能用TkAgg后端来减少数字窗口大小。也许这是一个错误。

作为解决方法,Qt4Agg可以让您随意更改图形大小。以下是如何在Spyder 2.3.1中使用Qt4Agg后端。

  1. 转到首选项 - >控制台 - >外部模块
  2. 对于“Qt的Python绑定库选择”使用“PyQt4的”
  3. 勾选“安装Spyder的输入钩Qt的”框。
  4. 设置GUI后端“Qt4Agg”(不带引号)
  5. 重启Spyder的

注意:如果你打开的喜好重新启动的Spyder后再次窗格中,则必须重新做第2步。出于某种原因,只要您打开偏好设置窗格,Spyder会自动默认为“PySide”而不是“PyQt4”。我打算向Spyder开发团队报告。