Matplotlib数字化被rcParams忽略

时间:2018-02-19 18:28:10

标签: python matplotlib

我以前使用过以下内容来确保我的图中的图形大小是一致的大小:

import matplotlib as mpl
rc_fonts = {'figure.figsize': (15, 9.3)}
mpl.rcParams.update(rc_fonts)
import matplotlib.pylab as plt

但是,我现在发现,对于我通常的默认值(15, 9.3),这被忽略了。以下内容证明了这一点:

import matplotlib as mpl
rc_fonts = {'figure.figsize': (15, 9.3)}
mpl.rcParams.update(rc_fonts)
import matplotlib.pylab as plt
# I draw some boring plot. 
plt.clf()
plt.plot(*[range(10)]*2)
print plt.gcf().get_size_inches()
print mpl.rcParams['figure.figsize']
plt.gcf().set_size_inches(15, 9.3, forward=True)
print plt.gcf().get_size_inches()

初始地图尺寸为[10.35, 9.3],根据需要为[15, 9.3]。但是,如果我使默认值非常大或更小,例如(32,19.3)然后图形窗口的大小正确。我想保持我想要的路线改变rcParams以设置默认值,而不是试图通过制作临时虚拟图来设置它两次。这是一个错误,还是我以错误的方式解决这个问题?

详细说明:

  • Python 2.7.12(在虚拟环境中,必须)。
  • 后端TkAgg(我希望保留原样)。
  • Matplotlib版本2.1.0。 (此错误/功能在版本2.1.2中也存在)。

PS - 我更喜欢避免使用matplotlib figax对象,而是直接使用plt接口。如果可能的话,我想用任何解决方案保持这种方式。

可能的已知问题:

我在github上发现了以下问题2716,我认为这是导致这种情况,但是没有出现适合rcParam设置路由的任何修复。所以任何帮助或建议仍然是受欢迎的。

当前输出:

以下评论是一些示例输出(使用Python 3完成以允许我安装最新版本的matplotlib):

Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
>>> 
... import matplotlib as mpl
... print(mpl.__version__)
... rc_fonts = {'figure.figsize': (15, 9.3)}
... mpl.rcParams.update(rc_fonts)
... import matplotlib.pylab as plt
... plt.plot(*[range(10)]*2)
... 
Backend Qt4Agg is interactive backend. Turning interactive mode on.
2.2.0rc1+124.gf1f83f6
>>> 
... print(plt.gcf().get_size_inches())
... print(mpl.rcParams['figure.figsize'])
... plt.gcf().set_size_inches(15, 9.3, forward=True)
... print(plt.gcf().get_size_inches())
... 
[ 10.35   9.3 ]
[15.0, 9.3]
[ 15.    9.3]

演示

enter image description here

问题的根源

如接受的答案中所述,问题是我使用多个显示器,并且Matplotlib无法生成大于主显示器的窗口。不幸的是,改变Ubuntu认为是主要显示器的是目前尚未解决的问题。因此问题不在于Matplotlib,而在于Ubuntu。通过在我的设置中将显示设置为左上角显示器,我能够解决此问题。

1 个答案:

答案 0 :(得分:1)

问题出现是因为there are several screens in use并且显示的数字不是主要数字。

目前无法自动显示大于主屏幕上允许的最大化窗口的数字。如果数字大于该数字,它仍然缩小以适合绘图窗口。

在窗口启动后,人们可能确实将图形调整为任何其他尺寸,正如在使用

的问题中所做的那样
plt.gcf().set_size_inches(15, 9.3, forward=True)