我想知道如何将使用Matplotlib生成的图的数据内容保存到Numpy数组中。
作为示例,假设我使用以下代码生成了轮廓图:
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)
plt.figure()
CS = plt.contour(X, Y, Z)
plt.show()
从中我得到以下内容:
我想知道如何保存这些数据,因此,在进行其他一些操作之后imshow
,例如,如果使用来显示该数据,则可以像原始图像一样恢复绘制并填充的轮廓颜色。
编辑:
即,我希望能够通过该contourf
方法生成图像,对其进行一些处理,例如在特定区域中应用一些蒙版,然后绘制此修改后的数据。对于这种contour
情况,我想将此图与一堆表示的水平一起使用来进行操作,而不是遍历cs.collection
并做一些事情(我真的不知道是什么)来获得等效值numpy.array
来表示该图。
我知道我可以将图像保存到文件中,而不是读取该文件,但这对我来说似乎是一个糟糕的解决方案。我也尝试过该解决方案,但随后我得到了完整的图,包括绿色区域,而不仅仅是真实的内容。
对于最新版本的matplotlib,您可以用于pickle
保存整个图或仅选择的图块,甚至可以从腌制数据中再次显示图:
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import pickle
if 0: # to generate the file
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10.0 * (Z2 - Z1)
ax = plt.subplot(111)
CS = ax.contourf(X, Y, Z)
pickle.dump(ax, open("mpl_test.pkl", "w"))
pickle.dump(CS, open("contours.pkl", "w"))
else: # Then at a later time...
x0 = pickle.load(open("mpl_test.pkl", "r"))
x1 = pickle.load(open("contours.pkl", "r"))
v = x1.collections[0].get_paths()[0].vertices # get the vertices of the contour
x, y = v[:,0]+.2, v[:,1]+.1 # shift the contour
x0.plot(x, y, 'w', linewidth=3) # add it to the plot as a white line
上面的示例首先用if
子句对等高线图进行腌制,然后在以后使用该else
零件。然后,它取一个轮廓并将其平移并将其重新绘制为白线。
即,该图形和修改后的轮廓完全从重新加载的腌制图形中绘制。
轮廓是mpl Path,并且比本示例所暗示的要复杂得多,因此此方法并非总是能很好地工作(尽管考虑到其他路径数据,它的通用版本将可以-参见上面链接的文档)。
腌制mpl物品有点新,并且没有完全记录或可靠,但它是有用的功能。
IPython Notebook:
另一方面,也许您真正想要的是IPython Notebook!在那里,您可以进行计算,查看和运行整个计算历史。除了存储数据,它还使您可以轻松地重新访问,修改之前所做的操作等。它非常强大。以下是一些链接和示例:A,B,C,D。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句