GVKun编程网logo

存储并重新加载matplotlib.pyplot对象(matplotlib存储函数图像)

12

本文将带您了解关于存储并重新加载matplotlib.pyplot对象的新内容,同时我们还将为您解释matplotlib存储函数图像的相关知识,另外,我们还将为您提供关于importmatplotli

本文将带您了解关于存储并重新加载matplotlib.pyplot对象的新内容,同时我们还将为您解释matplotlib存储函数图像的相关知识,另外,我们还将为您提供关于import matplotlib.pyplot as plt出错、java版matplotlib,matplotlib4j使用,java中调用matplotlib或者其他python脚本、matplotlib Axes.plot()与pyplot.plot()、Matplotlib pyplot从张量保存多个图像的实用信息。

本文目录一览:

存储并重新加载matplotlib.pyplot对象(matplotlib存储函数图像)

存储并重新加载matplotlib.pyplot对象(matplotlib存储函数图像)

我在伪操作环境中工作,我们在收到数据后制作新图像。有时,当输入新数据时,我们需要重新打开图像并更新该图像以创建合成,添加叠加等。除了添加到图像之外,还需要修改标题,图例等。

matplotlib中有内置的东西可以让我存储和重新加载matplotlib.pyplot对象以供以后使用吗?它需要保持对所有相关对象(包括图形,线条,图例等)的访问。也许咸菜是我想要的,但我对此表示怀疑。

答案1

小编典典

从1.2版本开始,matplotlib附带了实验酸洗支持。如果您遇到任何问题,请在mpl邮件列表上或通过在github.com/matplotlib/matplotlib上打开问题来告知我们

高温超导

编辑 :添加了一个简单的示例

import matplotlib.pyplot as pltimport numpy as npimport pickleax = plt.subplot(111)x = np.linspace(0, 10)y = np.exp(x)plt.plot(x, y)pickle.dump(ax, file(''myplot.pickle'', ''w''))

然后在一个单独的会话中:

import matplotlib.pyplot as pltimport pickleax = pickle.load(file(''myplot.pickle''))plt.show()

import matplotlib.pyplot as plt出错

import matplotlib.pyplot as plt出错

>>>import matplotlib.pyplot as plt
/usr/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment. warnings.warn(''Matplotlib is building the font cache using fc-list. This may take a moment.'')

在第八讲中,导入这个模块出错
解决:

找到缓存目录 删除~/.cache/matplotlib下面的缓存

 deleted ~/.cache/matplotlib/fontList.cache

但是,当我准备删的时候,再import matplotlib时时没有出错,不知道具体的原因是什么

java版matplotlib,matplotlib4j使用,java中调用matplotlib或者其他python脚本

java版matplotlib,matplotlib4j使用,java中调用matplotlib或者其他python脚本

写在前面,最近需要在java中调用matplotlib,其他一些画图包都没这个好,毕竟python在科学计算有优势。找到了matplotlib4j,大概看了下github上的https://github.com/sh0nk/matplotlib4j,maven repository:

<dependency>
   <groupId>com.github.sh0nk</groupId>
       <artifactId>matplotlib4j</artifactId>
       <version>0.5.0</version>
</dependency>

简单贴个测试类,更多的用法在test报下有个MainTest.class。

 @Test
    public void testPlot() throws IOException, PythonExecutionException, ClassNotFoundException, NoSuchMethodException, illegalaccessexception, InvocationTargetException, InstantiationException {
        Plot plot = Plot.create(PythonConfig.pythonBinPathConfig("D:\\python3.6\\python.exe"));
        plt.plot()
                .add(Arrays.asList(1.3, 2))
                .label("label")
                .linestyle("--");
        plt.xlabel("xlabel");
        plt.ylabel("ylabel");
        plt.text(0.5, 0.2, "text");
        plt.title("Title!");
        plt.legend();
        plt.show();

    }

下面问题来了,这个对matplotlib的封装不是很全面,源码里也有很多todo,有很多函数简单用用还行,很多重载用不了,比如plt.plot(xdata,ydata)可以,但是无法在其中指定字体plt.plot(xdata,ydata,fontsize=30);

所以想要更全面的用法还得自己动手,几种办法:

  1. 大部分还是用matplotlib4j中的,个别的自己需要的但里头没有的函数,实现他的builder接口,重写build方法,返回一个py文件中命令行的字符串形式,然后反射取到PlotImpl中的成员变量registeredBuilders,往后追加命令行,感觉适用于只有极个别命令找不到的情况,挺麻烦的,而且要是传nd.array(…)这种参数还得额外拼字符串。
//拿到plotImpl中用于组装python脚本语句的的registeredBuilders,需要加什么直接添加新的builder就行了
        Field registeredBuildersField = plt.getClass().getDeclaredField("registeredBuilders");
        registeredBuildersField.setAccessible(true);
        List<Builder> registeredBuilders = (List<Builder>) registeredBuildersField.get(plt);

        TicksBuilder ticksBuilder = new TicksBuilder(yList, "yticks", fontSize);
        registeredBuilders.add(ticksBuilder);
  1. 这种比较直接,参照matplotlib4j底层,直接写py.exe文件,执行命令行,比较推荐这种,一行一行脚本自己写,数据拼装方便,看起来直观。比如写如下的脚本并执行,搞两组数据,画个散点图
import numpy as np
import matplotlib.pyplot as plt
plt.plot(np.array(自己的x数据), np.array(自己的y数据), 'k.', markersize=4)
plt.xlim(0,6000)
plt.ylim(0,24)
plt.yticks(np.arange(0, 25, 1), fontsize=10)
plt.title("waterfall")
plt.show()

像下面这么写就行了

		//1. 准备自己的数据 不用管
        List<Float> y_secondList_formatByHours = y_secondList.stream().map(second -> (float)second / 3600).collect(Collectors.toList());

        //2.准备命令行list,逐行命令添加
        List<String> scriptLines = new ArrayList<>();
        scriptLines.add("import numpy as np");
        scriptLines.add("import matplotlib.pyplot as plt");
        scriptLines.add("plt.plot("+"np.array("+x_positionList+"),"+"np.array(" +y_secondList_formatByHours+"),\"k.\",label=\"waterfall\",lw=1.0,markersize=4)");
        scriptLines.add("plt.xlim(0,6000)");
        scriptLines.add("plt.ylim(0,24)");
        scriptLines.add("plt.yticks(np.arange(0, 25, 1), fontsize=10)");
        scriptLines.add("plt.title(\"waterfall\")");
        scriptLines.add("plt.show()");
        //3. 调用matplotlib4j 里面的pycommond对象,传入自己电脑的python路径
        pycommand command = new pycommand(PythonConfig.pythonBinPathConfig("D:\\python3.6\\python.exe"));
        //4. 执行,每次执行会生成临时文件 如C:\Users\ADMINI~1\AppData\Local\Temp\1623292234356-0\exec.py,这个带的日志输出能看到,搞定
        command.execute(Joiner.on('\n').join(scriptLines));

在这里插入图片描述

搞定。

matplotlib Axes.plot()与pyplot.plot()

matplotlib Axes.plot()与pyplot.plot()

Axes.plot()pyplot.plot()方法之间有什么区别?一个人是否将另一个人用作子例程?

看来我的绘图选项是

line = plt.plot(data)

要么

ax = plt.axes()
line = ax.plot(data)

甚至

fig = plt.figure()
ax = fig.add_axes([0,1,1])
line = ax.plot(data)

在某些情况下,优先使用一种而不是另一种?

Matplotlib pyplot从张量保存多个图像

Matplotlib pyplot从张量保存多个图像

如果您的代码有效,请按以下步骤更改它:

import os
d,n = os.path.split(__file__)
for t in range(0,batch_size):
    a = target_silhouette[t].cpu().numpy()
    plt.savefig(d + "\\test" + str(t) + ".png")
    plt.imshow(a)
,

我能够创建一个函数

def plot_image(image):
    image_save = image.cpu().numpy()    
    fig = plt.figure(figsize=(5,5))
    plt.grid("off");
    plt.axis("off");
    plt.imshow(image_save)

然后使用此循环

plot_period = 1
for t in range(0,3):
  new_image = target_silhouette[t]
  if t % plot_period == 0:
   plot_image(new_image)
   plt.savefig( "\test" + str(t) + ".png")

今天的关于存储并重新加载matplotlib.pyplot对象matplotlib存储函数图像的分享已经结束,谢谢您的关注,如果想了解更多关于import matplotlib.pyplot as plt出错、java版matplotlib,matplotlib4j使用,java中调用matplotlib或者其他python脚本、matplotlib Axes.plot()与pyplot.plot()、Matplotlib pyplot从张量保存多个图像的相关知识,请在本站进行查询。

本文标签: