簡體   English   中英

將 matplotlib plot 添加到保存為圖像的現有 plot

[英]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'

你不能直接做。 有一些變通方法:

  1. 您可以嘗試編輯圖像,類似於 Photoshop。
  2. 您可以嘗試讀取 python 中的 read.jpg 文件並將其“逐個像素”合並,但這很頭疼。 只有當所有軸都相同時,您才能執行此操作。 它將類似於:“如果像素在一個圖像中是白色的,而不是在另一個圖像中,那么只取非白色的那個”。 您可以通過這種方式構建一張將兩者合並的照片。 有點像面具。 但軸必須相同,圖像必須相同大小。
  3. 我想 NN 從圖中識別數據是一項簡單的任務。 我不熟悉這樣做的網絡,但我應該太難了。 考慮到這一點,您可以在 fig-1 上運行它並提取數據。 然后,您可以創建一個腳本,將這兩個數據組合在同一個圖像上。

最簡單的解決方案是在同一個腳本上創建這兩個腳本...如果您可以訪問這兩個腳本,則修改它們以將數據 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)

圖。1

使用以下代碼段,您可以將 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 的數據上

圖2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM