Showing posts with label Pylab. Show all posts
Showing posts with label Pylab. Show all posts

Thursday, June 04, 2009

[Latex]Paper中的作图+Latex相关

很凌乱的一些东西.在这里做个笔记.
====================第一部分 作图. ====================
作图工具很多,最最基本的包括excel, matlab.就不在这里复述.反正我都不爱用.excel的图太幼齿,matlab太笨拙.这里要提matplotlib以及gnuplot
(1) matplotlib
这是python的一个用于科技绘图的库.这个库比较神奇的一点是封装了一系列语法极其类似matlab的绘图函数在pylab这个文件中. 这样只要你安装了matplotlib,在一个python源程序当中import了pylab之后,就可以用诸如plot(X,Y)这样的matlab语法来绘制函数图像.实在是非常方便.
如果有python 和matlab的基本知识,上手时间几乎为0

由于图片在Latex文档中编译出来后通常会显得小, 先需要把默认字体增大:
import pylab
params = {'backend': 'ps',
'axes.labelsize': 14,
'text.fontsize': 10,
'lines.linewidth':2,
'legend.fontsize': 16,
'xtick.labelsize': 14,
'ytick.labelsize': 14}
pylab.rcParams.update(params)


(2) gnuplot
Unix世界中非常老资格的一个绘图工具.gnuplot的语法简单明了,学习曲线比较平缓.

gnuplot中有terminal这样一个概念.terminal其实是指输出设备.gnuplot支持接近80种不同的设备(或格式).我们常用的包括x11,png,postscript等等.选择x11的话就可以在X window中显示出我们要绘制的图像;而选择png, postscript的话则是告诉gnuplot你选择png 或者postscript格式的文件作为输出设备. gnuplot允许我们针对不同的输出设备做出统一或者不同的设定. 而且我们可以把设定写在~/.gnuplot当中让每次gnuplot启动的时候自动加载.比如我的设定包括
set terminal postscript eps enhanced color linewidth 2 font "Helvetica, 20"
set terminal x11 enhanced font "Helvetica, 15"
对于输出为eps的文件,我希望它字体大一些,线宽粗一些.通常paper里需要这样设定才能看得清楚.

绘图的基本用法包括
画一段sin(x)曲线
plot sin(x)
这里x取值范围默认是[-10,10],如果要改变x取值范围
set xrange [1:10]
如果要从文件里读入数据,比如用'data.txt'文件中第1列作x第3列作y作图,线段类型为"lines",这个curve取名为data1
plot 'data.txt' using 1:3 with lines title 'data1', 'data.txt' using 1:3 with lines title 'data2'
设置xlabel 以及字体(可选)
set xlabel "time t" font "Arial, 15"
设置输出文件名, 默认是STDOUT
set output "data.eps"
更新/重画
replot

(3) ploticus
一个商用绘图工具,不过好在免费.绘制出来的figure非常精美.但学习曲线非常陡.

================第二部分 Latex里插图================
(1)最基本的用法 无非就是先
\usepackage{graphicx}

然后在正文中需要插图的地方,
\begin{figure}[t]
\begin{center}
\showthe\columnwidth % Use this to determine the width of the figure.
\includegraphics[width=\columnwidth]{fig1.eps}
\caption{\label{fig:sin_cos} Plot of the sine and cosine functions.}
\end{center}
\end{figure}
如果是pdflatex, 可以支持png等非矢量格式图片

(2)使用psfrag这个包, 可以在latex文档中对插入的eps图片进行文字替换, 或者字体缩小/放大:
\begin{figure}[t]
\begin{center}
\psfrag{sin(x)}{$\sin(x)$}
\psfrag{cos(x)}{$\cos(x)$}
\psfrag{x (radians)}{$x$ (radians)}
\psfrag{y}{$y$}
{\footnotesize                  % Replace tick-lables with smaller font.
\psfrag{1.0}{1.0}
\psfrag{0.5}{0.5}
\psfrag{0.0}{0.0}
\psfrag{-0.5}{-0.5}
\psfrag{-1.0}{-1.0}
\psfrag{-8}{-8}
\psfrag{-6}{-6}
\psfrag{-4}{-4}
\psfrag{-2}{-2}
\psfrag{0}{0}
\psfrag{2}{2}
\psfrag{4}{4}
\psfrag{6}{6}
\psfrag{8}{8}
\showthe\columnwidth % Use this to determine the width of the figure.
\includegraphics[width=\columnwidth]{fig2.eps}
} % Note that the psfrag commands only work in the top-most environment.
\caption{\label{fig:sin_cos} Plot of the sine and cosine functions.}
\end{center}
\end{figure}

Friday, September 12, 2008

[Python]用Pylab给Paper画图

之前写paper 画图一般都用Matlab画图。因为Matlab的plot可以生成eps格式的图片。但是最近都是用Python的pylab包来画图。原因是一般用在paper里的eps文件插在paper里通常都显得字比较小,需要调整线宽和字体大小。手动在matlab的figure编辑界面里自然可以修改,但每次都要做同样的工作非常令人厌烦。或者可以在matlab画图的源文件里加上比如 plot(...., "linewidth", 2)之类的语句, 但是当画图的语句一多起来,这样也很麻烦。所以我觉得用pylab来画图更加方便。pylab的绘图语句和matlab有高度的兼容性。另外python强大的文件处理和字符串处理能力正是matlab的软肋。

使用pylab画图的时候, 可以事先用 rcParams 来改变默认的线宽、图例的字体大小、x,y轴的label和tick的字体大小。

rcParams['lines.linewidth']=2
rcParams['legend.fontsize']=16
rcParams['axes.labelsize']=14
rcParams['xtick.labelsize']=14
rcParams['ytick.labelsize']=14

后面就用普通的plot函数(用法和matlab一样)来画图。再有就是可以用savefig来直接存成eps文件。