[英]Adding a matplotlib plot to an existing plot saved as an image
我有一個我之前創建的 matplotlib plot 並將其保存為圖像(我們稱之為fig-1 )。 現在,我有一個生成另一個 plot 的腳本,我希望將 plot 覆蓋在前一個圖像上(圖 1 )。
由於環境問題,這兩個圖都不能由單個腳本生成。
我應該如何進行?
我生成的第一個 plot 在python3中,我必須運行的第二個腳本在python2中。 這兩個環境無法更改,因為一個在 ros2 中運行,第二個在 ros1 中運行。
在python3中酸洗第一個 plot 然后嘗試在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'
你不能直接做。 有一些變通方法:
最簡單的解決方案是在同一個腳本上創建這兩個腳本...如果您可以訪問這兩個腳本,則修改它們以將數據 object 和 plot 一起返回。
如果您仍然有機會運行創建原始圖像 fig-1 的腳本(如果我理解正確的話,這是真的),您可以將該圖保存為*.pickle
文件並再次加載以供以后添加額外的東西。
假設以下腳本創建了 fig-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)
使用以下代碼段,您可以將 plot(更精確的是matplotlib.figure.Figure
對象)轉儲為*.pickle
fig_handle
中的 fig_handle
# Save figure handle to disk
pl.dump(fig_handle, open('sinus.pickle','wb'))
您現在可以在單獨的腳本中再次加載figure_handle
object
# 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)
這樣您就可以將新的 plot 覆蓋在原始 plot 的數據上
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.