2016-08-12 67 views
12

Tôi có hai tệp dữ liệu sau đây tôi muốn vẽ bằng cách sử dụng gnuplot.gnuplot xếp chồng lên nhau biểu đồ chồng lên nhau

timings0.log:

41420 
32587 
4082 
4668 
81 
547 
325 

timings1.log:

41297 
32393 
4106 
4720 
75 
502 
266 

Họ đại diện cho timings của các thành phần khác nhau của một phần mềm, trong đó mỗi tập tin được tạo ra bởi một thực với một cấu hình khác và mỗi dòng trong các tệp tương ứng với một thành phần khác. Tôi đang sử dụng các lệnh sed để có thể trích xuất các dòng cụ thể trong các tệp thời gian (theo cách tiếp cận được đề xuất here) và có thể hiển thị các ô mà chỉ một số thành phần xuất hiện. Tôi muốn hiển thị cả hai tập hợp thời gian trong cùng một lô, trong một biểu đồ xếp chồng xếp chồng lên nhau.

Đây là mã hiện tại của tôi:

set terminal svg size 500,500 enhanced font 'Times-Roman,14' 

set key vertical maxrows 3 

set style data histograms 
set style histogram rowstacked title offset 0,-1 gap 1 
set boxwidth 0.5 relative 
set style fill solid 1.0 

set xlabel offset 0,1 
set xrange [-1:2] 

set xtics 0,1 
set xtics add ("1st Config"0) 
set xtics add ("2nd Config"1) 
set xtics add (""2) 

set yrange [0:50000] 
set ylabel "Time (ms)" 
set ytics 0,5000,50000 

set output "test.svg" 

plot newhistogram "0" lt 1, "<(sed '2!d' timings0.log)" notitle, "<(sed '3!d' timings0.log)" notitle, "<(sed '4!d' timings0.log)" notitle, "<(sed '5!d' timings0.log)" notitle,\ 
    newhistogram "1" lt 1, "<(sed '2!d' timings1.log)" t "Load", "<(sed '3!d' timings1.log)" t "Sort", "<(sed '4!d' timings1.log)" t "Calculation", "<(sed '5!d' timings1.log)" t "Cleanup" 

Mã này hoạt động hoàn hảo khi tôi chỉ hiển thị một biểu đồ (tương ứng với timings0.log ví dụ), nhưng khi chạy kịch bản ở trên để hiển thị cả biểu đồ, họ không lan ra trên xaxis và họ dường như chồng lên nhau. Đây là kết quả của kịch bản trên:

enter image description here

Có thể có một giải pháp rõ ràng, nhưng sau nhiều nỗ lực và tìm kiếm trên nhiều nguồn lực sẵn có trên mạng, tôi đã không có được kết quả chính xác. Tôi đang sử dụng gnuplot 5 patchlevel 3.

Xin cảm ơn trước, mọi trợ giúp sẽ được đánh giá cao!

Trả lời

6

Hãy thử at:

plot newhistogram at 0 lt 1, ... 
    newhistogram at 1 lt 1, ... 

Tôi cũng nhận được một lỗi với gap, ít nhất là trong gnuplot 4.6. Nó không có hiệu lực với rowstacked nhưng bạn có thể sử dụng nó trướcoffset. Mã tổng thể:

set terminal svg size 500,500 enhanced font 'Times-Roman,14' 

set key vertical maxrows 3 

set style data histograms 
set style histogram rowstacked 
set boxwidth 0.5 relative 
set style fill solid 1.0 

set xlabel offset 0,1 
set xrange [-1:2] 

set xtics 0,1 
set xtics add ("1st Config"0) 
set xtics add ("2nd Config"1) 
set xtics add (""2) 

set yrange [0:50000] 
set ylabel "Time (ms)" 
set ytics 0,5000,50000 

set output "test.svg" 

plot newhistogram at 0 lt 1, "<(sed '2!d' timings0.log)" notitle, "<(sed '3!d' timings0.log)" notitle, "<(sed '4!d' timings0.log)" notitle, "<(sed '5!d' timings0.log)" notitle,\ 
    newhistogram at 1 lt 1, "<(sed '2!d' timings1.log)" t "Load", "<(sed '3!d' timings1.log)" t "Sort", "<(sed '4!d' timings1.log)" t "Calculation", "<(sed '5!d' timings1.log)" t "Cleanup" 

Trông như thế này đối với tôi:

enter image description here

+0

Cảm ơn, mà đã làm các trick, giúp đỡ rất nhiều đánh giá cao! ;-) – Pyves

Các vấn đề liên quan