Bài viết hướng dẫn sử dụng các thao tác cơ bản của gnuplot để vẽ đồ thị


Giới thiệu gnuplot

gnuplot là một công cụ vẽ đồ thị gọn nhẹ và rất hữu dụng trên Linux. Đối với những người quen dùng các công cụ cồng kềnh và có giao diện đồ họa như MATLAB để làm việc này, gnuplot tỏ ra khó dùng lúc ban đầu. Tuy nhiên, nếu bạn nắm được các cú pháp cơ bản của nó, bạn sẽ thấy đây là một công vụ mạnh mẽ và đầy hiệu quả. Với chức năng tạo script để vẽ, việc tạo hoặc sửa đổi một đồ thị như hình bên dưới trở nên rất dễ dàng. Bài viết này sẽ hướng dẫn các bước để vẽ đồ thị dưới đây dùng gnuplot.

Nếu hệ thống của bạn chưa có gnuplot, bạn có thể download tại http://www.gnuplot.info/ (có cả phiên bản chạy trên win32). Nếu bạn dùng SuSE thì có thể cài đặt qua YaST.

Tạo file dữ liệu

Đầu tiên, bạn cần phải có dữ liệu để vẽ đồ thị. Trong hình trên, ta thấy đồ thị biểu diễn hiệu năng của hai thuật toán ở các tải hệ thống khác nhau. Đối với mỗi giải thuật, tại mỗi mức tải (0.1, 0.2,…,1), ta có một giá trị hiệu năng nhất định. Ví dụ đối với giải thuật 1, tại tải 0.1, giá trị hiệu năng tương ứng là xấp xỉ 0.006.

Ta tạo một file dữ liệu đầu vào để phục vụ cho việc vẽ đồ thị. Trong file này, các dải giá trị được lưu thành các cột. Trong trường hợp này, ta có 3 cột trong file dữ liệu. Cột thứ nhất chứa các giá trị tải, hệ thống: 0.1, 0.2,…, 1.0. Cột thứ hai và ba chứa các giá trị hiệu năng tại các tải tương ứng của giải thuật 1 và 2. Nói một cách khác, cột thứ nhất chứa các giá trị trên trục hoành, trong khi cột thứ hai và thứ ba chứa các giá trị trên trục tung. File dữ liệu có nội dung và định dạng như sau:

#input.dat
#sysload    	algorithm1            algorithm2
0.1    		0.0656755794997600    0.0656755794997600
0.2    		0.1238753585310630    0.1220778120277850
0.3    		0.1783263156856520    0.1748654302754770
0.4    		0.2370742533976900    0.2203082963571380
0.5    		0.2942470707894460    0.2651562304263400
0.6		0.3536638858995090    0.3023740314936200
0.7    		0.4005633048575230    0.3468979191578140
0.8    		0.4539412556575660    0.3790391314322320
0.9    		0.4871768607958810    0.4096393763240620
1.0    		0.5192035653219690    0.4394196421249750

Lưu file dữ liệu với tên là input.dat. Lưu ý rằng trong các file dữ liệu hoặc các file script, dấu # được dùng để ghi các chú thích, và các ký tự sau dấu # sẽ bị bỏ qua.

Các bước vẽ đồ thị

Sau khi tạo xong file dữ liệu, ta chạy gnuplot để bắt đầu vẽ. Giả sử bạn đang ở trong chế độ đồ họa (ta có thể vẽ và ghi kết quả ra file ở trong chế độ text, ví dụ trong phiên truy cập tới một máy từ xa, phần cuối bài sẽ nói thêm về vấn đề này), mở một cửa sổ terminal và gõ gnuplot. Trong chương trình gnuplot, gõ các dòng lệnh sau đây. Hầu hết các câu lệnh sau đều rất đơn giản và dễ hiểu.

set   autoscale    # scale axes automatically
set title "Algorithm 1 vs. Algorithm 2" #this is the title of your chart
set xlabel "System Load"
set ylabel "Performance"
set  key left top  #this command is to specify where to put your legend, 
                   #it can be keywords like: top, bottom, left, right or 
                   #exact position: set key x,y
set pointsize 2 #this is the size of the mark points on a line

Các câu lệnh kể trên dùng để thiết lập định dạng cho bản vẽ, tiêu đề cho các trục tọa độ và vị trí cũng như nội dung của chú thích. Tiếp theo, ta thực hiện phần quan trọng nhất: vẽ đồ thị. Gõ vào gnuplot câu lệnh sau:

plot    "input.data" using 1:2 title 'algorithm 1' with linespoints  lt -1 pt 1 lw 1, \
        "input.data" using 1:3 title 'algorithm 2' with linespoints lt -1 pt 12 lw 1

Các trường trong câu lệnh có ý nghĩa như sau:

  • “input.data”: đây là tên của file dữ liệu, file này cần có định dạng như đã mô tả ở phần trên. Trong trường hợp này, ta giả sử rằng file này nằm trong thư mục hiện thời, nếu không, ta phải chỉ đường dẫn cụ thể tới file đó.
  • x:y là thứ tự của cột dữ liệu được vẽ, cột thứ nhất (x) chứa dữ liệu trên trục hoành, cột thứ hai (y) chứa giá trị trên trục tung. Chú ý rằng các cột dữ liệu được đánh số từ 1 chứ không phải từ 0. Trong trường hợp này, ta muốn vẽ hai đường cong với cùng các giá trị hoành độ (cột 1) và các giá trị tung độ khác nhau (cột 2 và 3).
  • title xác định chú thích của mỗi đường cong trên đồ thị, trong trường hợp này là “algorithm 1” và “algorithm 2“.
  • with linespoints chỉ ra rằng ta muốn đánh dầu các điểm tại các giá trị dữ liệu và các điểm này được nối với nhau bằng một đường thắng.
  • lt -1 xác định màu của đường cong (và các điểm dữ liệu), -1 nghĩa là màu đen, bạn có thể thử các giá trị khác.
  • pt 1 xác định hình dạng của các điểm đánh dấu của một đường cong. Ví dụ 1 là dấu cộng (+), 12 là dấu hình thoi… Lưu ý rằng nếu bạn xuất đầu ra ra màn hình và xuất đầu ra ra file, các giá trị này sẽ cho những hình dạng khác nhau, do đó bạn nên kiểm tra lại để chắc chắn rằng chúng được hiển thị đúng như bạn mong muốn.
  • lw 1 xác định độ dày của đường cong, bạn nên thử một vài giá trị để xác định một giá trị phù hợp.

Nếu bạn muốn vẽ nhiều đường cong trên một đồ thị, hãy thêm dấu phẩy (,) và dấu gạch ngược (\) để bắt đầu một dòng mới và sử dụng cùng cú pháp như trên trừ việc không phải gõ lại plot ở đầu dòng. Trong trường hợp này tôi vẽ hai đường cong, đường cong thứ nhất sử dụng dữ liệu ở cột 1 và 2, đường cong thứ hai sử dụng dữ liệu ở cột 1 và 3.

Khi bạn đã gõ xong các dòng trên, nhấn “Enter” để xem kết quả. Khi đó, nếu không có lỗi gì (chẳng hạn file dữ liệu không tồn tại, cú pháp bị sai) chương trình sẽ mở một cửa sổ đồ họa mới để hiển thị đồ thị vừa được vẽ.

In kết quả ra file

Cách vẽ kể trên được dùng trong khi bạn muốn sửa và kiểm tra hình thức bản vẽ. Sau khi đã đạt được kết quả mong muốn, bạn muốn lưu kết quả vào một file .eps. Bạn cần gõ các lệnh sau:

set terminal postscript eps enhanced mono dashed lw 1
set output "plot.eps"
replot

Đoạn mã trên thiết lập đầu ra là file plot.eps và vẽ lại đồ thị vào đầu ra mới này. Bạn sẽ không thấy kết quả được hiển thị trên cửa sổ đồ thị nữa. Kiểm tra trong thư mục hiện thời, bạn sẽ thấy file plot.eps mới được tạo. Cách này có thể được dùng khi bạn muốn vẽ đồ thị mà không ở trong chế độ đồ họa.

Nếu bạn muốn chuyển lại về chế độ vẽ vào cửa số, gõ các lệnh sau:

set size 1,1
set terminal x11

Vẽ bằng file script

Tới đây, bạn tạo được đồ thị như mong muốn. Tuy vậy, bạn không muốn mỗi lần chạy gnuplot lại phải gõ lại các câu lệnh định dạng đồ thị, hoặc nếu bạn có thay đổi về dữ  liệu và muốn vẽ lại đồ thị, bạn không muốn lặp lại tất cả các thao tác ở trên. Khi đó, bạn chép tất cả các câu lệnh kể trên vào một file, đặt tên là plot.script.

#plot.script
set   autoscale 
set title "Algorithm 1 vs. Algorithm 2" 
set xlabel "System Load"
set ylabel "Performance"
set  key left top  
set pointsize 2 

set terminal postscript eps enhanced mono dashed lw 1
set output "plot.eps"

plot    "input.data" using 1:2 title 'algorithm 1' with linespoints  lt -1 pt 1 lw 1, \
        "input.data" using 1:3 title 'algorithm 2' with linespoints lt -1 pt 12 lw 1

Mỗi lần bạn cần vẽ lại đồ thị, bạn chỉ cần vào gnuplot và gõ lệnh:

load "plot.script"

để thu được file plot.eps với đồ thị như mong muốn. Bạn cũng có thể thay đổi các tiêu đề, dữ liệu, thêm bớt các đường… và vẽ lại đồ thị một cách nhanh chóng.

Ta cũng có thể gõ trực tiếp từ Linux mà không phải vào gnuplot:

$ gnuplot plot.script

để thu được file đồ thị kể trên.

Hy vọng bài viết này giúp cho bạn nắm được các bước cơ bản để vẽ một đồ thị với gnuplot và viết một script để thực hiện việc vẽ một cách nhanh chóng. Ngoài các thao tác kể trên, còn rất nhiều tính năng hữu ích của gnuplot mà bạn có thể tìm thấy trên mạng để phục vụ cho nhu cầu cụ thể của mình.

<sưu tầm>

Advertisements

3 Responses so far

  1. 1

    quang said,

    bạn ơi cho mình hỏi mình cài gnuplot rồi nhưng không thể vẽ được. khi mình gọi gnuplot trong terminal thì nó hiện ra dòng chữ này Terminal type set to ‘unknown’
    vì vậy mình nghĩ đây là nguyên nhân. bạn có thể chỉ giúp mình lý do và cách khắc phục vấn đề này được không
    Cảm ơn đã giúp đỡ!


Comment RSS

Comments are closed.

%d bloggers like this: