Mat*_*att 109 python matplotlib
有没有办法保存Matplotlib数字,以便可以重新打开并恢复典型的交互?(就像MATLAB中的.fig格式一样?)
我发现自己多次运行相同的脚本来生成这些交互式数字.或者我正在向我的同事发送多个静态PNG文件以显示情节的不同方面.我宁愿发送图形对象并让它们自己与它进行交互.
Dem*_*mis 50
我刚刚发现了如何做到这一点.@pelson提到的"实验泡菜支持"效果很好.
试试这个:
# Plot something
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.plot([1,2,3],[10,-10,30])
Run Code Online (Sandbox Code Playgroud)
交互式调整后,将图形对象保存为二进制文件:
import pickle
pickle.dump(fig, open('FigureObject.fig.pickle', 'wb')) # This is for Python 3 - py2 may need `file` instead of `open`
Run Code Online (Sandbox Code Playgroud)
稍后,打开图形,应该保存调整并且应该存在GUI交互:
import pickle
figx = pickle.load(open('FigureObject.fig.pickle', 'rb'))
figx.show() # Show the figure, edit it, etc.!
Run Code Online (Sandbox Code Playgroud)
您甚至可以从图中提取数据:
data = figx.axes[0].lines[0].get_data()
Run Code Online (Sandbox Code Playgroud)
(适用于线条,pcolor和imshow - pcolormesh可以通过一些技巧重建扁平数据.)
我从使用泡菜保存Matplotlib数字得到了很好的建议.
pel*_*son 38
从Matplotlib 1.2开始,我们现在有实验性的泡菜支持.试一试,看看它是否适用于您的情况.如果您有任何问题,请通过Matplotlib邮件列表或在github.com/matplotlib/matplotlib上打开一个问题告诉我们.
dr *_*bob 25
这将是一个很好的功能,但AFAIK它没有在Matplotlib中实现,并且由于存储数字的方式可能很难自己实现.
我建议(a)单独处理数据以生成图形(使用唯一名称保存数据)并编写图形生成脚本(加载保存数据的指定文件)并根据需要进行编辑或(b)保存为PDF/SVG/PostScript格式,并在Adobe Illustrator(或Inkscape)等奇特的图形编辑器中进行编辑.
编辑2012年秋季后:正如其他人在下面指出的那样(虽然这里提到这是接受的答案),自1.2版以来,Matplotlib已经允许你腌制数字.正如发行说明所述,它是一个实验性功能,不支持在一个matplotlib版本中保存图形并在另一个版本中打开.从不受信任的来源恢复泡菜通常也是不安全的.
对于共享/稍后编辑图(需要先进行重要的数据处理,可能需要在几个月之后调整,比如说在科学出版物的同行评审期间),我仍然建议工作流程(1)在生成绘图之前有一个数据处理脚本将处理后的数据(进入绘图)保存到文件中,(2)使用单独的绘图生成脚本(必要时进行调整)以重新创建绘图.这样,对于每个绘图,您可以快速运行脚本并重新生成它(并使用新数据快速复制绘图设置).也就是说,酸洗一个数字可以方便短期/互动/探索性数据分析.
为什么不直接发送Python脚本?MATLAB的.fig文件要求收件人让MATLAB显示它们,这相当于发送一个需要Matplotlib显示的Python脚本.
或者(免责声明:我还没试过这个),你可以尝试腌制这个数字:
import pickle
output = open('interactive figure.pickle', 'wb')
pickle.dump(gcf(), output)
output.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53568 次 |
| 最近记录: |