Точки дрожания в гнуплоте. Формат файла ввода данных - PullRequest
0 голосов
/ 15 января 2019

Я могу успешно воспроизвести примеры джиттера здесь: http://gnuplot.sourceforge.net/demo/violinplot.html

Однако, когда я пытаюсь использовать свои собственные данные, точки не "дрожат".

Вот файл данных (data.dat):

10 1 1 3 8 8 8
20 2 2 3 8 8 8
30 3 3 3 8 8 8

Вот минимальный входной файл gnuplot:

set jitter
plot 'data.dat' using 1:2 with points, '' u 1:3 with points, '' u 1:4 with points, '' u 1:5 with points, '' u 1:6 with points, '' u 1:7 with points

Точки находятся друг на друге, а я хочу, чтобы точки, находящиеся в одном и том же месте, были слегка смещены (ось X).

Я установил последнюю версию gnuplot: $ gnuplot --version gnuplot 5.2 уровень исправления 6

РЕДАКТИРОВАТЬ С РЕШЕНИЕМ: @ Комментарий Этана прояснил это для меня. Я могу добиться дрожания, реорганизовав свой файл входных данных так, чтобы он представлял собой один набор данных, который содержит внутренние «коллизии», а не считывал множество отдельных наборов данных. например:

10 1
10 1
10 3
10 3
20 2
20 2
30 8
30 8

И мой файл gnuplot теперь просто:

set jitter
plot 'data.dat' using 1:2 with points

1 Ответ

0 голосов
/ 16 января 2019

«set jitter» не будет работать для нескольких наборов данных, как отмечено в комментарии. Вы можете сделать что-то подобное, добавив случайное смещение в спецификаторе 'using'.

plot for [col=2:7] 'data.dat' using 1:(column(col) + (rand(0)-0.5)/2.) with points

Это отличается от «установки джиттера», поскольку все точек будут смещены случайным образом, тогда как при джиттере смещаются только перекрывающиеся точки, и смещение не является случайным.

enter image description here

В качестве альтернативы, поскольку в вашем случае столбцы различаются, возможно, вы хотите систематически смещаться в зависимости от номера столбца:

plot for [col=2:7] 'data.dat' using (column(1)+col/4.) : (column(col))

enter image description here

...