如果您想了解为什么从ipython笔记本生成的matplotlib图与终端版本略有不同?的相关知识,那么本文是一篇不可错过的文章,我们将对matplotlib版本进行全面详尽的解释,并且为您提供关于C
如果您想了解为什么从ipython笔记本生成的matplotlib图与终端版本略有不同?的相关知识,那么本文是一篇不可错过的文章,我们将对matplotlib 版本进行全面详尽的解释,并且为您提供关于Cpp调用Python3,使用matplotlib画(二维)图----1.配置(Clion,mingW64, python, matplotlib)、java版matplotlib,matplotlib4j使用,java中调用matplotlib或者其他python脚本、linux虚拟机上运行matplotlib与nbagg交互的ipython笔记本、matplotlib.widget无法在ipython笔记本中工作的有价值的信息。
本文目录一览:- 为什么从ipython笔记本生成的matplotlib图与终端版本略有不同?(matplotlib 版本)
- Cpp调用Python3,使用matplotlib画(二维)图----1.配置(Clion,mingW64, python, matplotlib)
- java版matplotlib,matplotlib4j使用,java中调用matplotlib或者其他python脚本
- linux虚拟机上运行matplotlib与nbagg交互的ipython笔记本
- matplotlib.widget无法在ipython笔记本中工作
为什么从ipython笔记本生成的matplotlib图与终端版本略有不同?(matplotlib 版本)
我有一个奇怪的问题。使用IPython
Notebook,我使用pandas和matplotlib创建了相当广泛的脚本来创建许多图表。修补完成后,我将代码复制(并清理了)到一个独立的python脚本中(这样我就可以将其推送到svn中,并且我的论文共同作者也可以创建图表)。
为了方便起见,我将独立的python脚本再次导入到笔记本中,并创建了许多图表:
import create_charts as ccdf = cc.read_csv_files("./data")cc.chart_1(df, ''fig_chart1.pdf'')...
奇怪的是,使用上述方法获得的.pdf文件与从Windows
7终端运行独立的python脚本时获得的.pdf文件略有不同。最显着的区别是,在特定图表中,图例位于上角而不是下角。但是也有其他小的区别(边框大小,字体似乎略有不同)
这可能是什么原因。我该如何解决呢?(我已经关闭我的笔记本并重新启动它,以重新导入create_charts
脚本并排除所有未保存的更改)我的终端报告我正在使用Python
2.7.2,并pip freeze | grep ipython
报告了ipython 0.13.1
答案1
小编典典扩展了Matt的答案(值得称赞,但我认为答案可能不太复杂),这就是我最终解决它的方式。
(a)我在中查询了ipython的默认matplotlib设置C:\Python27\Lib\site-packages\IPython\zmq\pylab\backend_inline.py
(请参阅Matt的答案)。
(b)并printmpl.rcParams[''figure.figsize'']
通过在脚本中插入以下代码,用终端版本中设置的值覆盖它们(我使用等等来查找):
import matplotlib as mpl#To make sure we have always the same matplotlib settings#(the ones in comments are the ipython notebook settings)mpl.rcParams[''figure.figsize'']=(8.0,6.0) #(6.0,4.0)mpl.rcParams[''font.size'']=12 #10 mpl.rcParams[''savefig.dpi'']=100 #72 mpl.rcParams[''figure.subplot.bottom'']=.1 #.125
Cpp调用Python3,使用matplotlib画(二维)图----1.配置(Clion,mingW64, python, matplotlib)
To my knowledge so far, Cpp画图是真滴捉急, 那就调用python帮帮忙吧。
百度了好久,试了好几次,终于走完了配置的过程。我要记录一下。
1.0 配置:(操作系统)64位Win7, (Cpp的IDE是)Clion。
1.1 安装Clion
官网下载就可以了,地址 https://www.jetbrains.com/clion/
1.2 安装,配置mingW64
1.2.1:Clion需要我们安装Toolchain,我用的是mingW64(因为我用的是64位系统),附上百度网盘地址。
地址:https://pan.baidu.com/s/14FkN0Ul9cvcRxCOcylmoxw,密码:qu5l
1.2.2:然后我一股脑把路径全部添加到环境变量path了
(
D:\ProgramFile\mingw64;
D:\ProgramFile\mingw64\bin;
D:\ProgramFile\mingw64\lib;
D:\ProgramFile\mingw64\include
)
1.2.3:让Clion找到mingw64
如果其中的Make, C Complier,C++ Complier没找到,就手动帮Clion添加。
!!!注意mingw的版本(指的是64位还是32位),一定要和pyhton的匹配。否则会出现如下错误:
载入Python.h:没问题 ; 读取其中函数:unreferenced...
1.3 安装python
1.3.1 安装python3.7
我的安装目录是 D:\ProgramFile\Python37 ,没有用Anaconda,事实上(可能是由于环境变量path中争抢调用关系的问题),我把原来装好的anaconda卸载了。
安装的版本是官网下载的。
同时,添加了 D:\ProgramFile\Python37到环境变量path。
1.3.2 用pip安装matplotlib
a. python3.7中的pip是自带的
b. 将python安装目录下的scripts添加到环境变量bin
c. (可选)查看python是否安装成功:在cmd界面,输入:python --version
d. (可选)查看pip是否安装成功:在cmd界面,输入:pip --version
e. (可选)升级pip:在cmd界面,输入:python -m pip install -U pip setuptools
f. 用pip安装matplotlib:在cmd界面,输入:python -m pip install matplotlib
1.4 Clion联结Cpp和python
1.4.1:CMakeLists.txt的配置:
用clion新建cpp的project,在CMakeLists.txt中添加以下两句话
# 添加python.h头文件路径
include_directories(D:/ProgramFile/Python37/include)
# 添加python动态链接库文件
link_libraries(D:/ProgramFile/Python37/libs/python37.lib)
如下图:
1.4.2:main.cpp的配置
我直接上图吧,如果这个cpp可以运行,那么说明配置成功了。
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));
linux虚拟机上运行matplotlib与nbagg交互的ipython笔记本
我希望按钮和其他交互式matplotlib对象从内部显示
我的ipython笔记本!截图
以下是我所做的:
1已安装http://datasciencetoolbox.org,这是一个安装了ipython和matplotlib版本1.3.1的流浪者盒子。
2我需要将matplotlib升级到最新版本,因为它具有执行内联交互绘图的功能。Matplotlib 1.4.1的新增功能!
matplotlib.widget无法在ipython笔记本中工作
我正在运行ipython notebook –pylab inline.
任何建议将非常感谢.
下面是一个绘制正弦波并添加下一个和上一个按钮的示例
据说会改变轴,但我没有交互性:
from matplotlib.widgets import Button fig,ax = plt.subplots() fig.subplots_adjust(bottom=0.2) t = np.linspace(0,10,1000) line,= plt.plot(t,np.sin(t),lw=2) class Index: dt = 0 def next(self,event): self.dt -= 1 line.set_ydata(np.sin(t + self.dt)) fig.canvas.draw() def prev(self,event): self.dt += 1 line.set_ydata(np.sin(t + self.dt)) fig.canvas.draw() callback = Index() axprev = plt.axes([0.7,0.05,0.1,0.075]) axnext = plt.axes([0.81,0.075]) bnext = Button(axnext,'>') bnext.on_clicked(callback.next) bprev = Button(axprev,'<') bprev.on_clicked(callback.prev)
解决方法
如果您使用包含的交互式后端之一(使用您选择的gui工具包),代码应该可以工作.
关于为什么从ipython笔记本生成的matplotlib图与终端版本略有不同?和matplotlib 版本的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Cpp调用Python3,使用matplotlib画(二维)图----1.配置(Clion,mingW64, python, matplotlib)、java版matplotlib,matplotlib4j使用,java中调用matplotlib或者其他python脚本、linux虚拟机上运行matplotlib与nbagg交互的ipython笔记本、matplotlib.widget无法在ipython笔记本中工作的相关信息,请在本站寻找。
本文标签: