Печать пользовательских ярлыков через каждые n элементов с использованием Gnuplot - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу создать точечную диаграмму файла, который выглядит следующим образом:

counter  N   x  y   
  1     200  50 50  
  2     200  46 46  
  3     200  56 56  
  4     200  36 36
  5     200  56 56

В этом файле 240 строк.N увеличивается на 200 каждые 30 строк.Поэтому, когда я строю графики чисел, я хочу создать точечный график значений x, y и счетчика.Вот мой код:

plot "file" using 1:3 title "hb" with points pt 2 ps 1 lc rgb "red", \
     "file" using 1:4 title "ls" with points pt 3 ps 1 lc rgb "blue"

В результате моя ось X имеет диапазон [1240].

Вопрос в том, что я хочу метку моегоОсь X содержит значения из второго столбца, и я хочу, чтобы они печатались после каждых 30 точек.

Итак, я хочу, чтобы моя метка оси X была настроена следующим образом: [200 400 600 800 800 000 000, 1400,1600], где у каждого по 30 баллов.

Я действительно искал этот вопрос раньше, нашел решение и решил его.Итак, я знаю, что где-то есть ответ.Но, видимо, я потерял свой код.Я искал старый пост в течение часа, но не смог его найти.

Может кто-нибудь помочь мне с использованием пользовательских ярлыков здесь?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

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

plot "file" using 1:3:xtic(int($1)%30 == 0 ? strcol(2) : 1/0) title "hb" pt 2 lc rgb "red", \
     "" using 1:4 title "ls" pt 3 lc rgb "blue"

Выражение Thr xtic(int($1)%30 == 0 ? strcol(2) : 1/0) помещает строковое значение столбца 2, когда значение в столбце 1 кратно 30. Вседругие значения пропускаются, поскольку 1/0 является недопустимым значением.

0 голосов
/ 29 ноября 2018

Я не уверен, как сгенерировать xtics из данных в gnuplot, поэтому я бы использовал bash, чтобы сгенерировать их для меня:

#! /bin/bash
xtics='('$(cut -d' ' -f1,2 file | sort -nuk2 | sed 's/\(.*\) \(.*\)/\2 \1/;s/^/"/;s/ /" /;s/$/,\\/')$'\n)'
gnuplot <<EOF
set term png
set output '1.png'
set xtics $xtics
plot "file" using 1:3 title "hb" with points pt 2 ps 1 lc rgb "red", \
         "" using 1:4 title "ls" with points pt 3 ps 1 lc rgb "blue"
EOF

На случайно сгенерированном входе он дает такой вывод:

generated graph

...