Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将matplotlib打印添加到保存为图像的现有打印_Python_Python 3.x_Python 2.7_Matplotlib_Pickle - Fatal编程技术网

Python 将matplotlib打印添加到保存为图像的现有打印

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

我有一个matplotlib绘图,我以前创建过,并将其保存为图像(我们称之为图1)。 现在,我有一个生成另一个绘图的脚本,我希望该绘图覆盖在前一幅图像上(fig-1

由于环境问题,两个绘图不能由单个脚本生成

我应该如何进行


我正在生成的第一个绘图在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'

你不能直接做。有一些担忧:

  • 你可以尝试编辑图像,就像photoshop一样
  • 您可以尝试在python中读取.jpg文件并“逐像素”合并它,但这是一个令人头痛的问题。只有当所有轴都相同时,才能执行此操作。它将是这样的:“如果像素在一个图像中是白色的,而在另一个图像中不是白色的,那么只取一个非白色的”。您可以通过这种方式构造一张照片,它是两者的合并。有点像面具。但轴必须相同,图像必须大小相同
  • 我猜NN从图中识别数据是一项简单的任务。我不熟悉这样的网络,但我觉得这太难了。记住这一点,您可以在图1上运行它并提取数据。然后,您可以创建一个脚本,将两个数据组合在同一个图像上

  • 最简单的解决方案是在同一个脚本上创建这两个脚本。。。如果您可以访问这两个脚本,您可以修改它们以返回数据对象并将它们打印在一起。

    您不能直接这样做。有一些担忧:

  • 你可以尝试编辑图像,就像photoshop一样
  • 您可以尝试在python中读取.jpg文件并“逐像素”合并它,但这是一个令人头痛的问题。只有当所有轴都相同时,才能执行此操作。它将是这样的:“如果像素在一个图像中是白色的,而在另一个图像中不是白色的,那么只取一个非白色的”。您可以通过这种方式构造一张照片,它是两者的合并。有点像面具。但轴必须相同,图像必须大小相同
  • 我猜NN从图中识别数据是一项简单的任务。我不熟悉这样的网络,但我觉得这太难了。记住这一点,您可以在图1上运行它并提取数据。然后,您可以创建一个脚本,将两个数据组合在同一个图像上

  • 最简单的解决方案是在同一个脚本上创建这两个脚本。。。如果您可以访问这两个脚本,您可以修改它们以返回数据对象并将它们一起打印。

    如果您仍然有机会运行创建原始图像图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'