在第二台监视器上更新/刷新matplotlib图

ttisahbt  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(133)

目前我正在使用Spyder和matplotlib进行绘图。我有两个监视器,一个用于开发,另一个用于(数据)浏览和其他东西。由于我在做一些计算,我的代码经常改变,我经常(重新)执行代码,并查看绘图结果是否有效。
有没有办法将matplotlib图放在第二个监视器上,然后从主监视器刷新它们?
我已经在寻找解决方案,但是什么都找不到。这对我真的很有帮助!
以下是一些附加信息:
操作系统:Ubuntu 14.04(64位)Spyder版本:2.3.2 Matplotlib版本:1.3.1.-1.4.2.

x6yk4ghg

x6yk4ghg1#

我知道这是一个老问题,但我遇到了一个类似的问题,并发现了这个问题。我设法移动我的图到第二个显示使用QT 4Agg后端。

import matplotlib.pyplot as plt
plt.switch_backend('QT4Agg')

# a little hack to get screen size; from here [1]
mgr = plt.get_current_fig_manager()
mgr.full_screen_toggle()
py = mgr.canvas.height()
px = mgr.canvas.width()
mgr.window.close()
# hack end

x = [i for i in range(0,10)]
plt.figure()
plt.plot(x)

figManager = plt.get_current_fig_manager()
# if px=0, plot will display on 1st screen
figManager.window.move(px, 0)
figManager.window.showMaximized()
figManager.window.setFocus()

plt.show()

[1]来自@divenex的回答:How do you set the absolute position of figure windows with matplotlib?

nkoocmlb

nkoocmlb2#

这与matplotlib有关,而不是Spyder。明确放置图形的位置似乎是一件只有解决办法的事情.... a.请参阅问题here的答案。这是一个老问题,但我不确定自那时以来是否有变化(任何matplotlib开发人员,请随时纠正我!)。
第二个显示器应该没有任何区别,听起来问题只是数字被一个新的取代。
幸运的是,你可以很容易地更新你已经移动到你想要的位置的图形,具体来说,通过使用对象接口,并且更新Axes对象,而不需要创建一个新的图形。下面是一个例子:

import matplotlib.pyplot as plt
import numpy as np

# Create the figure and axes, keeping the object references
fig = plt.figure()
ax = fig.add_subplot(111)

p, = ax.plot(np.linspace(0,1))

# First display
plt.show()

 # Some time to let you look at the result and move/resize the figure
plt.pause(3)

# Replace the contents of the Axes without making a new window
ax.cla()
p, = ax.plot(2*np.linspace(0,1)**2)

# Since the figure is shown already, use draw() to update the display
plt.draw()
plt.pause(3)

# Or you can get really fancy and simply replace the data in the plot
p.set_data(np.linspace(-1,1), 10*np.linspace(-1,1)**3)
ax.set_xlim(-1,1)
ax.set_ylim(-1,1)

plt.draw()

相关问题