Чтобы добавить случайные отклонения до точки данных, просто использовать rand
функции:
myrand(x) = (x + rand(0) - 0.5)
plot 'data.dat' using (myrand($1)):(myrand($2))
rand(0)
генерирует значение в диапазоне [0:1]
.
Если вы хотите построить каждой точке несколько раз, вам нужно повторять столько раз:
plot for [i=0:4] 'data.dat' using (myrand($1)):(myrand($2))
Для того, чтобы принять во внимание количество вхождений, как показано в вашей ссылке, один должен обмануть немного.
Рассмотрим файл данных (взятый из http://www.ats.ucla.edu/stat/spss/faq/jitter.htm), с третьего столбца таблицы, количество вхождений:
1 1 4
1 2 7
1 3 6
2 1 9
2 2 5
2 3 11
3 1 1
3 2 2
3 3 3
4 1 12
4 2 8
4 3 10
Одним из способов является извлечь максимальное количество вхождений из файла данных, а затем построить с итерациями , В каждой итерации добавляется точка, если ее количество больше, чем текущий итерационный индекс. Точка пропускается путем установки одного координат 1/0
:
stats 'data.dat' using 3 nooutput
set style line 1 pointtype 6 linecolor -1
myrand(x) = x + 0.3 * (rand(0) - 0.5)
plot for [i=0:int(STATS_max)-1] 'data.dat' \
using (myrand($1)):(i < $3 ? myrand($2) : 1/0) linestyle 1 notitle
Это дает (с 4.6.3):
где я использовал дополнительные настройки:
set terminal pngcairo
set output 'data.png'
set xtics 1
set ytics 1
set autoscale fix
set offset 0.5,0.5,0.5,0.5
ТНХ много для большой помощи, но можно ли это сделать без добавления столбца вхождения? –
@ zoma.saf Да, конечно. Это было бы проще. Если вы просто хотите, чтобы каждая точка случайно сдвигалась, просто используйте первый «скрипт» в моем ответе. Если вы хотите сдвинуть каждую точку, скажем '5' раз, просто отмените часть' stats' и используйте 'plot for [i = 0: 4] 'data.dat', используя (myrand ($ 1)) :(myrand ($ 2)) '. Если это то, что вы хотите, я могу добавить его в ответ. – Christoph
получил его, не знал эту особенность, так как я еще новичок :) –