Gnuplot: как предотвратить переопределение xticklabels «set xtics» - PullRequest
1 голос
/ 02 ноября 2019

У меня есть такой файл данных с тремя столбцами (с именем «0.dat», который содержит почти 10000 строк данных, и ниже приведен только для примера):

i ii iii
1 a 1
2 b 2
3 c 6
4 d 8
5 e 10
6 f 12
7 g 14
8 h 16
9 i 18
10 j 20

Первый и третийстолбец координата х и у координата, которая для графика. Второй столбец (ii) используется для метки xtics.

Я хочу, чтобы xtic и его метка появлялись на оси x с интервалом 3, то есть только в позиции 1 4 7 на оси x, если есть xtic mark и xtic label "adg".

Но следующий скрипт показывает, что каждый poit в моем файле данных создает xtic, то есть "xticklabels" переопределяет "set xtics".

set term png  size 800,600 
set output "0.png"
set grid
set xrang [1:]
set xtics 3
plot "0.dat" using 1:3:xticlabels(2) axes x1y1 w l
set output
pause 0

как запретить xticklabels переопределять "set xtics"?

1 Ответ

2 голосов
/ 02 ноября 2019

xticlabels всегда перезаписывают автоматически сгенерированные метки.

Однако вы можете включить оригинальную метку как часть xticlabel. Вот одна опция, которая печатает содержимое столбца 1 в виде числа, а содержимое столбца 2 в виде строки.

1) Определить формат метки. Затем мы используем этот формат для каждой третьей метки, с пустой меткой для двух других слотов: 2) Пропустить первую строку файла, которая не содержит данных. 3) Использовать формат метки для каждой третьей строки, в противном случае - пустые метки.

set bmargin 3 # leave room for 2 lines of x labels
label(i1,i2) = sprintf("%d\n%s",column(i1),stringcolumn(i2))

plot '0.dat' skip 1 using 1:3:xticlabel(int($0)%3==0 ? label(1,2) : "") with lines

enter image description here

Альтернативный подход

Используйте два графика, один для фактических данных без тикаметки, одна на 1/3 данных с метками и метками.

set bmargin 3 # leave room for 2 lines of x labels
label(i1,i2) = sprintf("%d\n%s",column(i1),stringcolumn(i2))

set yrange [0:*]  # So that a line at y = -10 will not show

plot '0.dat' skip 1 using 1:3, \
     '0.dat' skip 1 every 3 using 1:(-10):xticlabel(label(1,2)) with lines

enter image description here

...