在我创建许多数字的脚本中fix, ax = plt.subplots(...),我收到警告RuntimeWarning:已打开超过20个数字.通过pyplot接口(matplotlib.pyplot.figure)创建的数字将保留,直到明确关闭,并可能消耗太多内存.
但是,我不明白为什么我得到这个警告,因为保存图后fig.savefig(...),我删除它fig.clear(); del fig.我的代码中没有任何一点,我一次打开多个数字.尽管如此,我还是得到了关于太多公开数字的警告.这是什么意思/如何避免收到警告?
在过去的几天里,我一直在玩Numpy和matplotlib.我在尝试使matplotlib绘制函数而不阻塞执行时遇到问题.我知道在这里已经有很多线索提出了类似的问题,而且我已经搜索了很多但是没有设法让这项工作成功.
我曾经尝试过使用show(block = False),但我得到的只是一个冻结的窗口.如果我只是调用show(),则会正确绘制结果,但会阻止执行直到窗口关闭.从我读过的其他主题,我怀疑show(block = False)是否有效取决于后端.它是否正确?我的后端是Qt4Agg.你能看看我的代码并告诉我你是否看错了吗?这是我的代码.谢谢你的帮助.
from math import *
from matplotlib import pyplot as plt
print plt.get_backend()
def main():
x = range(-50, 51, 1)
for pow in range(1,5): # plot x^1, x^2, ..., x^4
y = [Xi**pow for Xi in x]
print y
plt.plot(x, y)
plt.draw()
#plt.show() #this plots correctly, but blocks execution.
plt.show(block=False) #this creates an empty frozen window.
_ = raw_input("Press [enter] to continue.")
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
PS.我忘了说我想在每次绘制内容时更新现有窗口,而不是创建一个新窗口.
我有数据分析模块,其中包含多次调用Matplotlib pyplot API的函数,每次运行时最多可生成30个数字.这些数字在生成后会立即写入磁盘,因此我需要从内存中清除它们.目前,在我的每个功能结束时,我都这样做
import matplotlib.pyplot as plt
plt.clf()
Run Code Online (Sandbox Code Playgroud)
但是我不太确定这个陈述是否能真正清除记忆.我特别担心,因为我看到每次运行模块进行调试时,我的可用内存空间不断减少.任何人都可以告诉我,在我将这些图写入磁盘后,每次我需要做些什么才能真正清除我的记忆?
谢谢.
有没有办法使用键盘关闭OS X中的pyplot数字(据我所知,你只能通过点击窗口关闭按钮关闭它)?
我尝试了很多关键组合,比如command-Q,command-W和类似的组合,但它们都没有在我的系统上运行.
我也试过这个代码贴在这里:
#!/usr/bin/env python
import matplotlib.pyplot as plt
plt.plot(range(10))
def quit_figure(event):
if event.key == 'q':
plt.close(event.canvas.figure)
cid = plt.gcf().canvas.mpl_connect('key_press_event', quit_figure)
plt.show()
Run Code Online (Sandbox Code Playgroud)
但是,上述内容在OS X上也不起作用.我尝试将print语句添加到quit_figure,但似乎从未调用过.
我正在尝试使用最新的公共OS X,matplotlib版本1.1.1以及OS X(2.7.3)附带的标准Python.有想法该怎么解决这个吗?每次必须触及鼠标是非常烦人的.
我正在循环绘制并保存数千个文件以供以后的动画使用,如下所示:
import matplotlib.pyplot as plt
for result in results:
plt.figure()
plt.plot(result) # this changes
plt.xlabel('xlabel') # this doesn't change
plt.ylabel('ylabel') # this doesn't change
plt.title('title') # this changes
plt.ylim([0,1]) # this doesn't change
plt.grid(True) # this doesn't change
plt.savefig(location, bbox_inches=0) # this changes
Run Code Online (Sandbox Code Playgroud)
当我运行它并获得大量结果时,它会在保存数千个图后崩溃。我想我想做的是重用我的轴,就像这个答案一样: https: //stackoverflow.com/a/11688881/354979,但我不明白如何。我该如何优化它?
我在python中构建了一个使用Tkinter的GUI应用程序.
单击按钮时,此应用程序会生成并显示图像.
使用matplotlib savefig("displayimage.png")在与我的app .py文件相同的文件夹中生成图像.
第一次按下按钮时显示图像正常,但第二次按下时,新图像与旧图像重叠.
我尝试通过os.remove("displayimage.png")从文件夹中删除现有图像,但这根本没有帮助.
你知道为什么它不会覆盖旧图像而不是重叠吗?
PS.我试过保存为.jpg,但结果相同.
提前致谢.码:
# make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])
# The slices will be ordered and plotted counter-clockwise.
labels = words
fracs = percent
colors = ('yellowgreen', 'gold', 'lightskyblue', 'lightcoral', 'blue', 'yellow', 'cyan', 'pink',
'purple', 'green', 'magenta', 'orange')
pie(fracs, labels=labels, colors=colors,
autopct='%.1f%%', shadow=True, startangle=90)
title("Most used words", fontsize=20)
savefig('senalyzed_piechart.png',dpi=80)
Run Code Online (Sandbox Code Playgroud) Python 在用 pyplot 绘制了一些图形后出现了内存错误(我在笔记本电脑上绘制了超过一百万个点的图形 - 在错误与点的数量直接相关之前可以绘制多少个图形)。
之后如何清除内存,以便我可以绘制更多图形?现在唯一的选择是ctrl + .重新启动内核。
我已经尝试了推荐的:
matplotlib.pyplot.close("all")
matplotlib.pyplot.clf()
Run Code Online (Sandbox Code Playgroud)
不清除错误。
我有一些图中的子图fig1,通过创建
ax = fig1.add_subplot(221)
Run Code Online (Sandbox Code Playgroud)
然后,我通过每个子图绘制内容
im=ax.plot(x,y)
Run Code Online (Sandbox Code Playgroud)
并通过添加一些轴标签
ax.set_xlabel('xlabel')
Run Code Online (Sandbox Code Playgroud)
然后我想完全清除一个特定的子图,如何使用cla(),clf()或close()来清除matplotlib中的图?.然而问题是,ax.cla()并且ax.clear()似乎只清除了绘图中的数据,而没有移除轴,轴刻度标签等.另一方面plt.clf()清除整个图形.介于两者之间吗?类似clf的命令可以清除子图中的所有内容,包括轴标签?或者我只是以错误的方式使用命令?
我想制作一系列图表,并将每个图表保存到文件中.但我不知道如何擦掉以前的情节.也许我需要每次都创建一些新对象,但我不会是哪个对象.这是我的代码,注意评论.这是我的代码:
import matplotlib.pyplot as plt
ind = (1,2,3,4)
groups=(
(1, (1.1,1.2,1.3,1.4)),
(2, (2.2,2.2,1.2,2.4)),
)
for group in reversed(groups):
#clean the slate ?
plt.bar(ind ,group[1])
plt.xticks([i+0.5 for i in ind],ind)
plt.savefig('%d.png' % group[0])
Run Code Online (Sandbox Code Playgroud) 我使用 QT Designer 在 PyQt 中创建了一个小应用程序。我有一些按钮,“绘图”按钮在 4 个不同的小部件上创建 4 个绘图。“清除”按钮必须清除这 4 个图。我尝试编写一些代码,但它没有运行。如何创建这个清除按钮?谢谢你。
这是我的应用程序的主要内容:
import sys
from Import_fsa import import_fsa
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QFileDialog
from Vannucci_Gemignani import Ui_MainWindow
class GUI_fsa(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui=Ui_MainWindow()
self.ui.setupUi(self)
self.ui.Button_Browse.clicked.connect(self.Browse)
self.ui.Button_Plot.clicked.connect(self.Plot)
self.ui.Button_Clear.clicked.connect(self.Clear)
def Browse(self):
fname=QFileDialog.getOpenFileName()
if fname=='': #se non viene selezionato nessun file, fname è
return #nullo, generando quindi un errore nell'import fsa
self.ui.lineEdit.setText(fname)
def Plot(self):
if self.ui.lineEdit.text()=='':
QtGui.QMessageBox.information(None,'Warning','Select fsa File',QtGui.QMessageBox.Ok)
return
data_set=import_fsa(self.ui.lineEdit.text())
self.ui.widget.canvas.ax.clear()
self.ui.widget_2.canvas.ax.clear()
self.ui.widget_3.canvas.ax.clear()
self.ui.widget_4.canvas.ax.clear()
self.ui.widget.canvas.ax.plot(data_set[0])
self.ui.widget_2.canvas.ax.plot(data_set[1])
self.ui.widget_3.canvas.ax.plot(data_set[2]) …Run Code Online (Sandbox Code Playgroud) 如何删除或关闭图表?
我定义了一个函数来绘制图形。但是,每当我更改变量并关闭 matplotlib 窗口并绘制新图形时,不会删除之前的图形。下面是我的程序:
def graphforcevsmass():
global velocityvalue
global radiusvalue
for i in range(101):
j = i * float(int(velocityvalue) ** 2 / int(radiusvalue))
x.append(i)
y.append(j)
plt.plot(x, y)
plt.draw()
Run Code Online (Sandbox Code Playgroud)
在我的程序中,我使用了一个按钮来激活上面的功能,变量将根据 tkinter 窗口中的比例而变化。(我正在使用 tkinter 和 matplotlib 模块在 enthought canopy 中编码 python)
matplotlib ×11
python ×10
memory ×2
plot ×2
pyqt4 ×1
python-3.x ×1
qt ×1
subplot ×1
tkinter ×1