Không, không có tùy chọn để tự động chia tỷ lệ x và y thành các giá trị giống nhau. Đây là một giải pháp, làm thế nào bạn có thể làm điều này với một số thủ thuật.
Nếu bạn muốn giữ gnuplot của mở rộng các phạm vi đến tics tiếp theo, bạn có thể làm điều đó như sau:
Trước tiên, bạn phải vẽ một lần bằng cách sử dụng thiết bị đầu cuối unknown
. Điều này tiết kiệm phạm vi x và y trong các biến gnuplot GPVAL_X_MIN
, GPVAL_X_MAX
, GPVAL_Y_MIN
và GPVAL_Y_MAX
. Sau đó, bạn thiết lập các dãy và replot:
set terminal push # save current terminal
set terminal unknown
plot 'datafile'
set terminal pop # restore previous terminal
min = (GPVAL_Y_MIN < GPVAL_X_MIN ? GPVAL_Y_MIN : GPVAL_X_MIN)
max = (GPVAL_Y_MAX > GPVAL_X_MAX ? GPVAL_Y_MAX : GPVAL_X_MAX)
set xrange[min:max]
set yrange[min:max]
set size ratio -1
replot
Những thứ push/pop được yêu cầu chỉ nếu bạn muốn giữ lại các thiết lập thiết bị đầu cuối ban đầu.
Để làm cho việc tái sử dụng được, ví dụ: để sử dụng với multiplot
, bạn có thể bọc tất cả những lệnh bên trong một chuỗi và gọi eval
vào nó:
autoscale_xy(datafile) = \
"set terminal push; set terminal unknown; set autoscale;".\
"plot '".datafile."'; set terminal pop;".\
"min = (GPVAL_Y_MIN < GPVAL_X_MIN ? GPVAL_Y_MIN : GPVAL_X_MIN);".\
"max = (GPVAL_Y_MAX > GPVAL_X_MAX ? GPVAL_Y_MAX : GPVAL_X_MAX);".\
"set xrange[min:max]; set yrange[min:max];"
...
files = "first second third fourth"
do for [f in files] {
eval(autoscale_xy(f))
plot f
}
Một lựa chọn khác sẽ được sử dụng để tính toán stats
tối đa và tối thiểu x-và y-giá trị và thiết lập các dãy phù hợp:
stats 'datafile' using 1:2 nooutput
min = (STATS_min_y < STATS_min_x ? STATS_min_y : STATS_min_x)
min = (STATS_max_y > STATS_max_x ? STATS_max_y : STATS_max_x)
sc = 1.05
set xrange[sc*min:sc*max]
set yrange[sc*min:sc*max]
set size ratio -1
plot 'datafile'
Cảm ơn giải pháp. Tuy nhiên, phương pháp này khá thất vọng, vì tôi đang sử dụng 'multiplot' để vẽ đồ thị 4 từ các cột khác nhau trong tệp dữ liệu. phải làm điều này cho mỗi tập dữ liệu không phải là lý tưởng, nhưng hoàn toàn khả thi. – Rohan
Vâng, thực sự. Tôi cập nhật câu trả lời của mình để chỉ cho bạn cách bạn có thể đặt tất cả những thứ này vào một chuỗi và sử dụng 'eval' để làm cho nó có thể tái sử dụng được. – Christoph