2012-06-29 47 views
9

Làm cách nào để giới hạn tính tự động của gnuplot, để ví dụ cho y-max, ít nhất một giá trị nhất định và nó sẽ tự động tăng lên tới giới hạn cố định?Ranh giới tối thiểu và tối đa của Gnuplot để tự động quy đổi

Từ khi nhìn vào tài liệu, tôi chỉ thấy cách sửa min- hoặc max-end của trục, trong khi cái còn lại được tự động thu nhỏ.

About autoscaling on PDF page 93

+0

Bạn có thể làm rõ ý của mình bằng cách tự động tính toán không? Bạn có muốn đặt ymax thành một giá trị nhất định hay bạn muốn chia tỷ lệ dữ liệu sao cho giá trị tối đa của nó có một giá trị nhất định? – andyras

+0

@andyras Ví dụ về ymax: tối thiểu (của ymax) có thể là 100 và tối đa 1000. Nếu điểm dữ liệu cao nhất là 50, thì ymax sẽ là 100. Nó sẽ tự động mở rộng cho các giá trị lên đến 1000. Sau đó các giá trị sẽ bị cắt bỏ. – varesa

Trả lời

18

Kể từ phiên bản 4.6 gnuplot cung cấp một cú pháp mới để xác định giới hạn trên và dưới cho quá trình tự động. Đối với trường hợp của bạn, bạn có thể sử dụng

set xrange [0:100 < * < 1000] 

Trích dẫn từ tài liệu:

Phạm vi trong đó autoscaling đang được thực hiện có thể bị giới hạn bởi một ràng buộc thấp <lb> hoặc một trên ràng buộc <ub> hoặc cả hai. Cú pháp là

{ <lb> < } * { < <ub> } 

Ví dụ

0 < * < 200 

bộ <lb> = 0<ub> = 200.

Cú pháp đó có thể được áp dụng cho cả giá trị tối thiểu hoặc tối đa là set *range.

Để autoscale xmin nhưng giữ nó tích cực, sử dụng

set xrange [0<*:] 

Để autoscale x nhưng giữ phạm vi tối thiểu từ 10 đến 50:

set xrange [*<10:50<*] 

Xem tài liệu về set xrange để biết thêm thông tin.

4

Tôi không nghĩ rằng đó là có thể, hoặc là bạn có autoscaling trên không-, min- hoặc Max-, hoặc cả hai trục tức là .:

set yrange [FIXED_MIN : FIXED_MAX] 
set yrange [  * : FIXED_MAX] 
set yrange [FIXED_MIN :   *] 
set yrange [  * :   ] 

tương ứng.

+0

Vì vậy, có vẻ như nó thực sự là như thế, thay vì tôi không thể tìm thấy nó. Dường như tôi phải tự điều chỉnh bằng cách sử dụng dữ liệu – varesa

4

Trong trường hợp này, bạn có thể lọc dữ liệu và để gnuplot làm điều đó là bình thường tự động mở rộng quy mô:

set yrange [*:*] 
plot 'mydatafile' u 1:(($2 >= YMIN && $2 <= YMAX) ? $2 : 1/0) 
+0

Đó là khá nhiều những gì tôi đã làm (, nhưng bên ngoài của gnuplot). Xin lỗi nếu tôi đọc mã sai, nhưng điều đó bỏ đi mọi giá trị bên dưới YMIN? Bạn có thể đã hiểu sai những gì tôi muốn (ví dụ Ymin = 0, Ymax = 100-1000). Tôi đã giải quyết điều này bằng cách thêm một điểm dữ liệu duy nhất, với màu nền (vì vậy nó là vô hình) tại YMIN. Điều đó đã cho tôi hiệu quả tôi muốn. – varesa

+1

@varesa - Nếu bạn đang sử dụng gnuplot 4.6, cũng có lệnh 'stats' mà bạn có thể ghép cặp bộ lọc ở trên và các biến được xác định gnuplot:' GPVAL_YMIN' và 'GPVAL_XMIN', nhưng bây giờ chúng ta bắt đầu trở nên phức tạp hơn một chút. điểm "vô hình" là một ý tưởng thú vị tuy nhiên - tôi thích nó. – mgilson

+0

@mgilson Gnuplot 4.6 đã thêm ngay cả cú pháp mới cho giới hạn trên và dưới trong tự động tính toán, như 'set xrange [0: 100 <* <1000]'. – Christoph

1

Kể từ khi mọi người dường như quan tâm đến câu hỏi này, tôi sẽ thêm cách tôi giải quyết này như một câu trả lời:

Tôi đã tối thiểu cho việc tự động hóa bằng cách chèn một điểm đánh dấu vô hình vào đầu dữ liệu. Điều đó làm cho âm mưu luôn luôn "hiển thị" nó, mặc dù nó không thể nhìn thấy ong.

Sau đó, tôi đã triển khai tối đa bên ngoài của gnuplot (có thể có khả năng bên trong nó, xem câu trả lời mgilson), trong tập lệnh phân tích cú pháp mà tôi đã sử dụng để chuẩn bị dữ liệu cho gnuplot.

Thực ra trong tập lệnh, tôi lấy tất cả các giá trị "đã cắt bớt", thêm chúng vào y = 0 và làm cho chúng trở thành màu đỏ. Bằng cách đó tôi nhận được một "cảnh báo", các giá trị quá lớn để có thể hiểu được đồ thị. (Chương trình của tôi giám sát ping giữa hai máy chủ, và không có ý nghĩa cố gắng vẽ đồ thị 5s + độ trễ => Tôi đánh dấu nó là kết nối bị hỏng)

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