2013-10-15 2 views
2

Мне интересно, есть ли способ рисовать дублированные точки в gnuplot, не позволяя им быть невидимыми, помещая точку в (X + rand (-0.5; 0.5), Y + rand (-0,5; 0,5)). Таким образом, точка не помещается в X/Y предыдущей точки, но - в зависимости от рандомизации - немного вверх, вниз, влево или вправо. Тогда никакая точка не станет невидимой.рисование дублированных точек в gnuplot с небольшим отрывом

Этот эффект называется «джиттером». Это хороший пример: http://www.ats.ucla.edu/stat/spss/faq/jitter.htm

ответ

4

Чтобы добавить случайные отклонения до точки данных, просто использовать 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):

enter image description here

где я использовал дополнительные настройки:

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 
+0

ТНХ много для большой помощи, но можно ли это сделать без добавления столбца вхождения? –

+0

@ zoma.saf Да, конечно. Это было бы проще. Если вы просто хотите, чтобы каждая точка случайно сдвигалась, просто используйте первый «скрипт» в моем ответе. Если вы хотите сдвинуть каждую точку, скажем '5' раз, просто отмените часть' stats' и используйте 'plot for [i = 0: 4] 'data.dat', используя (myrand ($ 1)) :(myrand ($ 2)) '. Если это то, что вы хотите, я могу добавить его в ответ. – Christoph

+0

получил его, не знал эту особенность, так как я еще новичок :) –

Смежные вопросы