Python 将matplotlib打印添加到保存为图像的现有打印
我有一个matplotlib绘图,我以前创建过,并将其保存为图像(我们称之为图1)。 现在,我有一个生成另一个绘图的脚本,我希望该绘图覆盖在前一幅图像上(fig-1) 由于环境问题,两个绘图不能由单个脚本生成 我应该如何进行Python 将matplotlib打印添加到保存为图像的现有打印,python,python-3.x,python-2.7,matplotlib,pickle,Python,Python 3.x,Python 2.7,Matplotlib,Pickle,我有一个matplotlib绘图,我以前创建过,并将其保存为图像(我们称之为图1)。 现在,我有一个生成另一个绘图的脚本,我希望该绘图覆盖在前一幅图像上(fig-1) 由于环境问题,两个绘图不能由单个脚本生成 我应该如何进行 我正在生成的第一个绘图在python3中,我必须运行的第二个脚本在python2中。无法更改这两个环境,因为其中一个在ros2中运行,另一个在ros1中运行 在python3中对第一个绘图进行酸洗,然后在python2中尝试对其进行解锁时,我遇到以下错误: Traceb
我正在生成的第一个绘图在python3中,我必须运行的第二个脚本在python2中。无法更改这两个环境,因为其中一个在ros2中运行,另一个在ros1中运行 在python3中对第一个绘图进行酸洗,然后在python2中尝试对其进行解锁时,我遇到以下错误:
Traceback (most recent call last):
File "./latencycheckclient.py", line 58, in <module>
fig_handle = pl.load(file('/home/arusarka/dev_ws/src/devel_space/devel_space/ros2_latency.pickle','rb'))
File "/usr/lib/python2.7/pickle.py", line 1384, in load
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 864, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 1223, in load_build
setstate(state)
File "/usr/lib/python2.7/dist-packages/matplotlib/transforms.py", line 1684, in __setstate__
self._init(state['child'])
KeyError: u'child'
回溯(最近一次呼叫最后一次):
文件“/latencycheckclient.py”,第58行,在
fig_handle=pl.load(文件('/home/arusarka/dev_ws/src/devel_space/devel_space/ros2_latency.pickle',rb'))
文件“/usr/lib/python2.7/pickle.py”,第1384行,已加载
返回Unpickler(file.load())
文件“/usr/lib/python2.7/pickle.py”,第864行,已加载
调度[键](自身)
文件“/usr/lib/python2.7/pickle.py”,第1223行,在load\u构建中
设置状态(状态)
文件“/usr/lib/python2.7/dist-packages/matplotlib/transforms.py”,第1684行,在__
self._init(状态['child'])
关键错误:u'child'
你不能直接做。有一些担忧:
最简单的解决方案是在同一个脚本上创建这两个脚本。。。如果您可以访问这两个脚本,您可以修改它们以返回数据对象并将它们打印在一起。您不能直接这样做。有一些担忧:
最简单的解决方案是在同一个脚本上创建这两个脚本。。。如果您可以访问这两个脚本,您可以修改它们以返回数据对象并将它们一起打印。如果您仍然有机会运行创建原始图像图1的脚本(如果我理解正确,这是真的),您可以将图形另存为
*.pickle
文件,然后再次加载,以便以后添加其他内容
假设以下脚本创建了图1:
# Script1
import numpy as np
import matplotlib.pyplot as plt
import pickle as pl
# Plot simple sinus function
fig_handle = plt.figure()
x = np.linspace(0,2*np.pi)
y = np.sin(x)
plt.plot(x,y)
使用以下代码段,可以将绘图(更精确地说是matplotlib.figure.figure
对象)转储为fig\u handle
文件中的pickle
# Save figure handle to disk
pl.dump(fig_handle, open('sinus.pickle','wb'))
现在,您可以在单独的脚本中再次加载
figure\u handle
对象
# Script2
import matplotlib.pyplot as plt
import pickle as pl
import numpy as np
# Load figure from disk and display
fig_handle = pl.load(open('sinus.pickle','rb'))
甚至从中检索或操作数据
x_old = fig_handle.axes[0].lines[0].get_data()[0]
y_old = fig_handle.axes[0].lines[0].get_data()[1]
x_new = x_old * .75 + 1
y_new = y_old * -.35
plt.plot(x_old, y_old)
plt.plot(x_new, y_new)
因此,您可以将新绘图覆盖在原始绘图的数据上
如果您仍然有机会运行创建原始图像fig-1的脚本(如果我理解正确,这是真的),您可以将图形另存为
*.pickle
文件,然后再次加载,以便以后添加其他内容
假设以下脚本创建了图1:
# Script1
import numpy as np
import matplotlib.pyplot as plt
import pickle as pl
# Plot simple sinus function
fig_handle = plt.figure()
x = np.linspace(0,2*np.pi)
y = np.sin(x)
plt.plot(x,y)
使用以下代码段,可以将绘图(更精确地说是matplotlib.figure.figure
对象)转储为fig\u handle
文件中的pickle
# Save figure handle to disk
pl.dump(fig_handle, open('sinus.pickle','wb'))
现在,您可以在单独的脚本中再次加载
figure\u handle
对象
# Script2
import matplotlib.pyplot as plt
import pickle as pl
import numpy as np
# Load figure from disk and display
fig_handle = pl.load(open('sinus.pickle','rb'))
甚至从中检索或操作数据
x_old = fig_handle.axes[0].lines[0].get_data()[0]
y_old = fig_handle.axes[0].lines[0].get_data()[1]
x_new = x_old * .75 + 1
y_new = y_old * -.35
plt.plot(x_old, y_old)
plt.plot(x_new, y_new)
因此,您可以将新绘图覆盖在原始绘图的数据上
我正在生成的第一个绘图是在python3中,我必须运行的第二个脚本是在python2中。无法更改这两个环境,因为其中一个在ros2中运行,另一个在ros1中运行。在使用您提到的代码片段运行脚本之后,我得到了以下错误:
File”/usr/lib/python2.7/dist packages/matplotlib/transforms.py”,第1684行,在uu setstate\uuuu self.u init(state['child'])键错误:python2.7函数中的u'child'
不存在。在pl.load函数中尝试file
,使用file
函数时也会出现同样的错误。我在问题中添加了它。我生成的第一个情节是在python3中,我必须运行的第二个脚本是在python2中。无法更改这两个环境,因为其中一个在ros2中运行,另一个在ros1中运行。在使用您提到的代码片段运行脚本之后,我得到了以下错误:文件/usr/lib/python2.7/dist packages/matplotlib/transforms.py”,第1684行,在uu setstate\uuu self.init(state['child'])键错误:python中的u'child'