在gnuplot中绘制重复点,边距较小

时间:2013-10-15 22:09:59

标签: gnuplot duplicate-removal

我想知道是否有办法在gnuplot中绘制重复点而不让它们不可见,将点指向(X + rand(-0.5; 0.5),Y + rand(-0.5; 0.5))。因此,点不是放在前一点的X / Y处,而是 - 取决于随机化 - 稍微向上,向下,向左或向右。然后没有点变得不可见。

此效果称为“抖动”。这是一个很好的例子:http://www.ats.ucla.edu/stat/spss/faq/jitter.htm

1 个答案:

答案 0 :(得分: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