有没有办法保存Matplotlib数字,以便可以重新打开并恢复典型的交互?(就像MATLAB中的.fig格式一样?)
我发现自己多次运行相同的脚本来生成这些交互式数字.或者我正在向我的同事发送多个静态PNG文件以显示情节的不同方面.我宁愿发送图形对象并让它们自己与它进行交互.
我有一个嵌套类:
class WidgetType(object):
class FloatType(object):
pass
class TextType(object):
pass
..和一个引用嵌套类类型(不是它的实例)的对象,就像这样
class ObjectToPickle(object):
def __init__(self):
self.type = WidgetType.TextType
尝试序列化ObjectToPickle类的实例会导致:
PicklingError:无法挑选<class'setmanager.app.site.widget_data_types.TextType'>
有没有办法在python中腌制嵌套类?
我在 MacOS 上使用 Matplotlib 和 Slime Text。我使用Python 3.5和Matplotlib 2.0。
当我处理图形时,我通常有一个脚本来绘制数据,并将图形保存在一个 .pdf 文件中,扩展名为 .pdf 文件plt.savefig()。然后我使用Skim(pdf 查看器)以便在每次修改和运行脚本时刷新文件。这允许我将我的工作布局设置为干净:脚本有一个窗口,图形有一个窗口会自动刷新。
我想保持相同的布局,但使用 Matplotlib 图形(因为它们是交互式的)。我正在寻找一种使用方法,plt.show()但始终与我第一次运行脚本时创建的图形相同。
例如:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.figure()
noise = np.random.rand(1, 100)
ax(noise)
plt.show()
Run Code Online (Sandbox Code Playgroud)
import matplotlib.pyplot as plt
import numpy as np
# This is the super command I am looking for
fig = plt.get_previous_run_figure()
ax = fig.axes
noise = …Run Code Online (Sandbox Code Playgroud) 因为matplotlib 1.3 matplotlib数字是可以腌制的
当我尝试在stackoverflow上找到一个例子时:
import matplotlib.pyplot as plt
import numpy as np
import pickle
ax = plt.subplot(111)
x = np.linspace(0, 10)
y = np.exp(x)
plt.plot(x, y)
pickle.dump(ax, file('myplot.pickle', 'w'))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "D:/Work/Programming/Experimental/picklematplotlib/main.py", line 15, in <module>
pickle.dump(ax, file)
File "C:\Python32\lib\site-packages\six.py", line 116, in __getattr__
_module = self._resolve()
File "C:\Python32\lib\site-packages\six.py", line 105, in _resolve
return _import_module(self.mod)
File "C:\Python32\lib\site-packages\six.py", line 76, in _import_module
__import__(name)
File "C:\Python32\lib\dbm\gnu.py", line 3, in <module>
from _gdbm import *
ImportError: …Run Code Online (Sandbox Code Playgroud) 使用python matplotlib模块,我们可以使用pylab.savefig()函数来保存数字.但是,似乎此函数不能用于以.fig格式保存数字..fig格式是matlab图形格式.
使用.fig格式,我们可以调整/修改数字,这就是我想将数字保存为.fig格式的原因.
那么有没有办法用python matplotlib以.fig格式保存数字?
我有一个返回Figure创建的函数pyplot.此函数在返回之前关闭图形.如果我没有关闭它,只显示它会很容易plt.show(),但让我们假设我不能这样做.
我可以轻松地将返回Figure的文件保存到文件中,但是我找不到显示它的方法(即:有一个显示该图的弹出窗口).
from matplotlib import pyplot as plt
def new_figure():
fig = plt.figure()
plt.plot([0, 1], [2, 3])
plt.close(fig)
return fig
fig = new_figure()
fig.savefig('output.svg')
fig.show()
Run Code Online (Sandbox Code Playgroud)
我怎么能显示这个数字?
我想创建一个 python 脚本,沿水平轴放大和缩小 matplotlib 图形。我的图是一组水平条形图。
我还想让它能够采用任何通用的 matplotlib 图表。
我不想只加载图像并放大该图像,我想沿水平轴放大图表。(我知道该怎么做)
有什么方法可以将创建的图形保存和加载为数据文件,或者是否有一个对象可以稍后保存和加载?
(通常,我会创建图形,然后使用 matplotlib plt.show 显示它,但是图形创建需要时间,而且我不想每次要显示它时都重新创建图形)
我曾经pickle转储matplotlib数字,如SO中的答案所示。下面是代码片段——
import pickle
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1,2,3],[10,-10,30])
pickle.dump(fig, open('fig.pickle', 'wb'))
Run Code Online (Sandbox Code Playgroud)
下面是加载腌制图的代码片段-
import pickle
figx = pickle.load(open('fig.pickle', 'rb'))
figx.show()
Run Code Online (Sandbox Code Playgroud)
上面的代码显示以下错误-
AttributeError: 'NoneType' object has no attribute 'manager'
Figure.show works only for figures managed by pyplot, normally created by pyplot.figure().
Run Code Online (Sandbox Code Playgroud)
我在 Ubuntu 14.04 LTS 64 位操作系统上使用 Python 3.6.3。以下是我的环境的更多详细信息-
> import matplotlib
> matplotlib.__version__
'2.1.0'
> matplotlib.get_backend()
'Qt5Agg'
> import sys
> sys.version_info
sys.version_info(major=3, minor=6, micro=3, releaselevel='final', serial=0)
Run Code Online (Sandbox Code Playgroud)
PS:我的问题似乎类似于在 …