本文将带您了解关于存储并重新加载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存储函数图像)
- import matplotlib.pyplot as plt出错
- java版matplotlib,matplotlib4j使用,java中调用matplotlib或者其他python脚本
- matplotlib Axes.plot()与pyplot.plot()
- Matplotlib pyplot从张量保存多个图像
存储并重新加载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
/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,其他一些画图包都没这个好,毕竟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);
所以想要更全面的用法还得自己动手,几种办法:
- 大部分还是用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);
- 这种比较直接,参照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()
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从张量保存多个图像
如果您的代码有效,请按以下步骤更改它:
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从张量保存多个图像的相关知识,请在本站进行查询。
本文标签: