显示标签为“gnuplot”的博文。显示所有博文
显示标签为“gnuplot”的博文。显示所有博文

2008/03/08

利用Python绘制论文图片: Gnuplot,pylab

没有评论:
python 生成 数据,gnuplot/pylab 画图, 嵌入到latex。 这里:python 调用 gnuplot 画图,set output 到 png or latex.

首先,安装数值计算包 numpy, scipy

1. NumPy 1.04 : numpy is a new version of numarray. numpy,已替代Numeric.
http://numpy.scipy.org

sudo apt-get install python-numpy

import numpy

2. SciPy library depends on NumPy

install scipy: (only for optimized package using LPAS, since numpy contains it.)
www.scipy.org


然后,安装 gnuplot 或者 pylab

安装PyLab: plotting with the pylab module from matplotlib, depending on numpy. free from: http://matplotlib.sourceforge.net/

install:
sudo apt-get install python-matplotlib
import math
import pylab # a new name of matplotlib


安装python-gnuplot module
(by Michael haggerty http://gnuplot-py.sourceforge.net/)

sudo apt-get install python-gnuplot


参考书 python scripting for computational science.pdf




Python-Gnuplot 1.7 interface

没有评论:

all python module files are located under ./build/lib/Gnuplot
demo.py
Gnuplot.py
PlotItems.py

Interface intrdocution:
PlotItems.Data()

if want to redraw, can use replot()
gp.plot(p1)
gp.replot(p2)

or add all into one itemlist, then plot()
gp._add_to_queue( (p1,p2,p3) )
gp.replot()

一些 tricks:

如果要在一个page上画多副图,可以
======================================
set multiplot ;会抹掉前面的图
plot ...

set parametric ;参数画图
plot [0:2*pi] cos(t),sin(t)
unset parametric ;恢复

plot ... ;标题会和第一条标题重叠

==========
如果不用set multiplot,可以 plot, replot,replot...

Gnuplot两种绘图模式:multiplot

没有评论:

在 gnuplot> 模式下,
plot 命令会冲掉前面的图,而
replot 会在原图上画,并且顺序排列图标志文字

在multiplot>模式下,
plot和replot都不会冲掉前面的图,但
plot 的标志文字会和前面的覆盖
replot的标志文字不会和前面的覆盖,顺序排列

但是参数画图不能用replot, 后面也不能接其他replot。
例如:
set parametric
plot [0:2*pi] cos(t), sin(t) notitle
unset parametric

所以如果目的是多图重叠绘制,并且要用到参数绘图,建议方案是:

* 使用multiplot模式,
* 非参数绘图用 replot
* 参数绘图用 set, plot, unset。缺点是参数绘图的图标文字会重叠,但设成title="" 也可接受。

279 unset multiplot # or else cannot set term to ps
280 set term postscript
281 set output "sample.ps"
282 set multiplot

283 plot x # no previous plot
284 plot x+2

285 set parametric
286 plot [0:2*pi] cos(t), sin(t) notitle
287 unset parametric

288 plot x+3

289 history

Gnuplot支持图片格式,保存,及插入到latex

没有评论:

在文件中置入 gnuplot 绘制的图形

目前支持格式 postscript(*.ps), enhanced postscript(*.eps), x11(screen)

set terminal postscript eps color lw 1 “Helvetica” 20
如果想让线条粗些,可以修改 lw 后面的 1
然后再加上一句这个来设置输出文件:
set output ‘sample.eps’

所有终端在能力上都不相同。其中的一些(如 LaTeX)可能不支持文本的旋转,所以如果您像我们前面那样设置 ylabel,在不同的终端中可能显示不一样。换句话说,您可以在 LaTeX 的特定终端中使用 LaTex 命令。例如, set ylabel "$sin(\\theta)$"(注意我们使用两个反斜杠产生一个 LaTex 所需的反斜杠 —— gnuplot 在将双引号中所括的字符串传送到终端驱动程序之前,先对其进行反斜杠处理)。现在,您可以使用 \input{output.tex} 将输出文件包含在 LaTeX 文件中。要在 PostScript 终端中获得相同的结果,使用相应的 PostScript 命令: {/Symbol q} 。在 enhanced PostScript 和 LaTeX 中,您可以使用表示法 x^{superscript}和 x_{subscript} 得到上标文字。还要注意缩写的终端和输出命令:

eps 驱动程序的能力set term post enh
# enhanced PostScript, essentially PostScript
# with bounding boxes
set out 'gplt.eps'
set xlabel '{/Symbol q_1}
set ylabel 'sin^2({/Symbol q_1})'
plot sin(x)**2

控制比例和长宽比

默认情况下,gnuplot 对 x 轴和 y 轴都使用比例系数 1,但是它对控制图形的长宽比(y 轴长度与 x 轴长度的比率)不起作用。终端驱动程序使用终端的默认长宽比。比例系数、长宽比或者两者都可以使用 set size 命令指定,例如:

# square is synonymous to an aspect ratio of 1;
# scale y-axis by 2, retain x-axis size
set size ratio square 1,2

gnuplot 使用给定的长宽比能否成功绘制图可能受到终端能力的限制。 set size 也是与 multiplot 命令一起使用才有用,multiplot 命令用于在同一输出屏幕或文件中生成多个图。

安装作图软件 gnuplot

没有评论:

如果 sudo apt-get install gnuplot 不行则从 www.gnuplot.info 下载 版本 4。2。0
然后解压缩,在root权限下执行
./configure
(may prompt to install "texinfo" package in advance)
make
make check # test
make install #install

注意: 如果 ./configure 失败,需要安装基本编程环境:
sudo apt-get install build-essential # for gcc 编译

sudo apt-get install xorg-dev #for "set term x11" 如果设置 x11终端失败

安装完毕后,在命令行下运行:
$ gnuplot
就进入了gnuplot
系统出现:
gnuplot>
画个最简单的吧,sin(x)
在提示符下面输入:
gnuplot> plot [-3.14:3.14] sin(x)

一般情况下使用gnuplot都是科学绘图,因此很多都是放在文章里面。一般优秀的科技文献都是用latex来编写的,所以gnuplot提供了直 接输出 tex文件的功能,只需要把output设置为latex就可以了。下面来看一个例子,就把上面的正弦曲线插入到你的文章中。在命令行下输入:
gnuplot> set terminal latex
set output "sin.tex"
plot [-3.14:3.14] sin(x)
那么程序自动生成了一个tex文件,其包含一系列代码,都是绘图用的,可以用写字板打开,里面都是一些指令,你完全可以忽略掉。你可以把这个文件直接插入你的文章中,例如
\begin{figure}
\begin{center}
\input{sin.tex}
\end{center}
\end{figure}


奇怪我安装的gnuplot不支持png, jpeg terminals,只有 ps图像格式。没办法,只好安装了imagemagick好使用convert命令

sudo apt-get install imagemagick

convert sample.ps sample.png

convert -rotate 90 sample.ps sample.png #图像旋转90度