Vẽ đồ thị trong Latex bằng Pgfplots và Gnuplot

Trong bài trước tôi đã hướng dẫn các bạn vẽ đồ thị chất lượng cao bằng Latex và giới thiệu qua về Pgfplots. Tôi muốn nhấn mạnh lại rằng đồ thị chất lượng cao rất quan trọng trong các công bố khoa học và các bài thuyết trình hội nghị. Ở bài viết này, tôi sẽ giới thiệu với các bạn nâng cao hơn bài trước đối với dạng đồ thị phức tạp hơn. Thông thường gói phần mềm Pgfplots đã hỗ trợ rất đa dạng các kiểu đồ thị, các bạn có thể tham khảo ở link sau: http://pgfplots.sourceforge.net/gallery.html. Tuy nhiên đối với tính toán thống kê, ví dụ trong trường hợp chúng ta cần vẽ đường xu hướng (trend line) trên đồ thị, khi đó chỉ sử dụng Pgfplots sẽ là chưa đủ. Sẽ có hai cách có thể áp dụng trong trường hợp này. Cách đầu tiên là bạn sử dụng phần mềm khác như Excel, R … để xác định dạng của phương trình xu hướng, sau đó chúng ta sẽ vẽ đồ thị này bình thường trong Pgfplots với Latex. Cách này đơn giản nhưng bất tiện, do phải sử dụng nhiều bước trung gian. Cách thứ hai có vẻ tốt hơn, đó là kết hợp giữa cả hai gói phần mềm Pgfplots và Gnuplot. Gnuplot cũng là phần mềm mã nguồn mở nổi tiếng, bản thân nó cũng có thể tự xuất bản các đồ thị chất lượng cao. Tuy nhiên ở đây tôi chỉ sử dụng nó như một dạng kịch bản trong Latex để khai thác về mặt tính toán thống kê.

Trước khi bắt đầu, chúng ta cần cài đặt Gnuplot trong Cygwin và Pgfplots trong Texmaker đối với hệ điều hành Windows. Chú ý rằng trong Texmaker chúng ta cần sửa lại câu lệnh PdfLatex như sau:

pdflatex -synctex=1 -interaction=nonstopmode --enable-shell %.tex

Chúng ta xét ví dụ sau:

\documentclass{standalone}
\usepackage{filecontents}

\begin{filecontents}{test.dat}
0.2 -0.8
1 -0.2
1.6 0.2
2.5 2.5
3 5
\end{filecontents}

\usepackage{pgfplots}
\tikzset{mark options={mark size=3, line width=0.15mm}}
\pgfplotsset{compat=1.6}

\begin{document}

\begin{tikzpicture}[scale=0.8]
\begin{axis}[
name=plot, width=1\linewidth,
xlabel={X}, xtick={-1,0,...,3},
ylabel={Y}, ytick={-1,0,...,5},
enlargelimits=false,
title=Fitting of datapoints with gnuplot,
legend pos={north west,},
ticks=both, grid=major,
]
\addplot[only marks,mark=square*,fill=blue] file {test.dat};
\addlegendentry{The ``measured'' points}
\addplot gnuplot [raw gnuplot,mark=none, line width=1.5pt] {
 f(x)=a*x**3+b*x+c;
 fit f(x) 'test.dat' using 1:2 via a,b,c;
 plot [x=0:3] f(x);
 }; 
\addlegendentry{The fitted curve}
\end{axis}
\end{tikzpicture}

\end{document}

Đoạn code trên mô tả cách thêm một đường xu hướng bậc 3 có dạng y=a*x^3+b*x+c sử dụng Gnuplot trong Latex. Ngoài ra còn rất nhiều ứng dụng thú vị khi sử dụng kết hợp Pgfplots và Gnuplot mà các bạn có thể khám phá. Đối với ví dụ trên các bạn sẽ thu được đồ thị như sau:

gnuplot_pgfplots

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s