您的位置:首页 > 编程语言 > PHP开发

人类已经无法阻止理工科宅男了~~~(Gnuplot 和 Matplotlib使用小节)

2012-03-05 15:17 399 查看
1,前言

吃屎都难(CSDN)论坛上有张犀利图片(猛击),充分反映了广大理科男生的兴许爱好,见此情此景,我们不能给程序员丢脸,所以我们来画一张出来。

2,LINUX下画图

在Linux下画曲线图,经过查询,发现有一款类似Matlab的工具,叫GNUPLOT,其实Linux下也有Matlab,不过是版权软件,所以还是不弄了。

2.1 GNUPLOT的安装

安装很简单:apt-getinstall gnuplot

提示缺少的包,再安装一下就可以了;

2.2 简单的画图

终端:

gnuplot

出现命令提示界面:

setxzeroaxis;

setyzeroaxis; //让坐标轴显示出来

set xrange [0:1.5];

set yrange [-1.5:0.1]//设置xy轴的显示范围

plot3*x*log(x)-1.0/36*exp(-(36.0*x-36.0/exp(1))**4)

2.3 效果




2.4文档资料

同志们可以参考如下文档:

1,北大手册

2,官方网站的函数说明

3,CSDN上一篇入门简介

4,IBM文档库中用法实例说明

3,用Python+Matplotlib画图

这个程序在Linux下运行非常简单,但是大多数人用的Win32,虽然GNUPLOT也有Win版,但是要有安装环境;那么,我们该如何选择:使用C\C++和OPENGL来描绘?不过显得有点小题大做,也不会OPENGL库,TC下虽然比较容易,但是实在是太落伍了。

试试初学的Python,发现Python库真的很牛逼啊,有个叫Matplotlib库,就是作图用的,达到出版水平

3.1安装

Linux下面安装是比较简单的。

sudo apt-get install python-matplotlib python-numpy

3.2使用参考

Matplotlib是Python一个比较成熟的库,有关说明可以参见官方文档

3.3脚本

在本例中的文本是:

#!/usr/bin/python  
        from pylab import *

        x = arange(-2,2,0.001)  #x范围
        y = 3*x*log(x)-1.0/36*exp(-(36.0*x-36.0/exp(1))**4)
        plt.plot(x,y)
        plt.title(u'LOL')  #标签
        plt.xlabel(u'x')
        plt.ylabel(u'y')
        plt.axis([-0.05,1.2,-1.5,0.2])   #坐标轴范围
        text(0.0,0.05,r'$f(x)=3x{log}(x)-\frac{1}{36}e^{-(36x-\frac{36}{e})^4},fontsize=18) #公式显示
        plt.grid(True) #网格显示 
        plt.show()
4,打包成WIN程序

Python有几个不错的打包程序,比较知名就是py2exe;

4.1 安装

我在LINUX下没有发现py2exe,这个要在Win下安装,因为用到了很多Win的DLL,Shit,有下了python2.7.msi,numpy,matplotlib,py2exe2.7,对应的WIN版本,注意版本号要一致。安装都是GUI,不解释

4.2 打包脚本

A,首先我们打开命令行cmd,C:\Python27\目录下,把打包的脚本复制到此目录下,主要是为了方便,

写一个脚本setup.py:

这个脚本写的可费事,各种错误,先解决DLL找不到,后来打包后又找不到matplotlibdata file,后来在官方文档中找到了解决方法。

我们先把正确安装文本写出来,错误的,我会在后面附录中加上:

#Used successfully in Python2.5 with matplotlib 0.91.2 and PyQt4 (andQt 4.3.3)
fromdistutils.core import setup
importpy2exe

#We need to import the glob module to search for all files.
importglob

#We need to exclude matplotlib backends not being used by thisexecutable. You may find
#that you need different excludes to create a working executable withyour chosen backend.
#We also need to include include various numerix libraries that theother functions call.

opts= {
'py2exe':{ "includes" : [ "matplotlib.backends",
"matplotlib.figure","pylab","numpy",
"matplotlib.backends.backend_tkagg"],
'excludes':['_gtkagg', '_tkagg', '_agg2', '_cairo', '_cocoaagg',
'_fltkagg','_gtk', '_gtkcairo', ],
'dll_excludes':['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll']
}
}

#Save matplotlib-data to mpl-data ( It is located in thematplotlib\mpl-data
#folder and the compiled programs will look for it in \mpl-data
#note: using matplotlib.get_mpldata_info
data_files= [(r'mpl-data',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')),
#Because matplotlibrc does not have an extension, glob does not findit (at least I think that's why)
#So add it manually here:
(r'mpl-data',[r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
(r'mpl-data\images',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
(r'mpl-data\fonts',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\*.*'))]

#for console program use 'console = [{"script" :"scriptname.py"}]
setup(windows=[{"script": "lol.py"}], options=opts, data_files=data_files)
B,编译命令:

Python setup.py py2exe

在一段狂多的输出后,注意一下提示信息,往往是提醒你注意运行要附近的DLL文件等,如果你分发后在别的机器上无法运行,那么你要把这些文件放入dist文件夹就可以了。

4.3 运行

编译后生成build和dist文件夹,dist就是分布文件,里面找到exe,就可以运行了,提示出错的话,就要看下Log文件,找下解决方法。

5.附录

5.1尝试打包

分别装了python27.msi,numpy,matplotlib,scimpy包,编写的程序在控制台下可以正常运行。

安装py2exe程序,需要编写一个setup脚本

实例为:

#setup.py
fromdistutils.core import setup
importpy2exe
#setup(console=["lol.py"])
setup(
options= {
"py2exe":{
"dll_excludes":["MSVCP90.dll"],#开始没有这句
}
},
windows=[{"script":"lol.py"}]
)
出现MSVCP90缺失问题,添加后正常,可以参照以下两篇文章:1,(请猛击);2,(请猛击);

这里可以把文件放在编译目录下也可以

后来编译出现错误RuntimeError:Could not find the matplotlib data files网上查了一下,废了很多事情,都没有解决,越来越挫

费了半天事情,搜索一下,发现官方文档有说明(请猛击

修改以后,去掉不必要的包和Include选项,打包正常了。

5.2,运行可能需要的文件
***binary dependencies ***
Yourexecutable(s) also depend on these dlls which are not included,
youmay or may not need to distribute them.

Makesure you have the license if you distribute any of them, and
makesure you don't distribute files belonging to the operating system.

OLEAUT32.dll- C:\Windows\system32\OLEAUT32.dll
USER32.dll- C:\Windows\system32\USER32.dll
IMM32.dll- C:\Windows\system32\IMM32.dll
SHELL32.dll- C:\Windows\system32\SHELL32.dll
ole32.dll- C:\Windows\system32\ole32.dll
COMDLG32.dll- C:\Windows\system32\COMDLG32.dll
fftpack_lite.pyd- C:\Python27\lib\site-packages\numpy\fft\fftpack_lite.pyd
COMCTL32.dll- C:\Windows\system32\COMCTL32.dll
ADVAPI32.dll- C:\Windows\system32\ADVAPI32.dll
msvcrt.dll- C:\Windows\system32\msvcrt.dll
WS2_32.dll- C:\Windows\system32\WS2_32.dll
GDI32.dll- C:\Windows\system32\GDI32.dll
KERNEL32.dll- C:\Windows\system32\KERNEL32.dll
MSVCP90.dll– C:\Python27\MSVCP90.dll
打包编译可能出现以上问题,把msvcp90.dll复制到dist文件夹里面,就可以了,这个文件在VC2008里面都有,不行网上搜一下。

5.3 发布时候问题

我在自己安装有Python环境下运行,没有任何错误,但是分发到别的机器上,运行程序正常,但是公式无法显示,是乱码,关闭程序后有错误提示,提示某字体模块没有找到,我尝试将模块附加到包中,但是无法解决这个问题,有知道的请给个解决方法,多谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: