2013-10-18 118 views
2

我在gnuplot的以下数据:gnuplot的,拉丝重复点和着色

2012-09-18 0 2 12 
2012-03-15 1 4 5 
2012-12-18 24 8 11 
2012-09-18 2 8 11 
2012-03-15 16 5 5 
2011-12-06 5 2 3 
2012-12-18 3 12 8 
2012-09-18 4 4 8 
2012-03-29 11 6 2 
2011-12-06 9 7 3 
2012-12-18 6 7 8 
2012-09-18 4 3 8 
2012-02-09 27 2 1 
2012-12-18 2 1 8 
2012-09-18 6 14 8 

第一柱; x(日期)

第2列; y

第3列;点颜色

第4列;出现次数(点是重复的)

我需要写一个gnuplot的方案,其中:

  1. 我的绘制(X,Y)点。
  2. 根据第3列值(可能超过50种不同颜色)为每个点提供不同的颜色。
  3. 如果第4列大于0,则该点被复制,并且它必须被绘制n次,并给它的x,y一个随机位置,并有一个小的余量。例如(rand(x)-0.5,rand(y)-0.5)。

另一个问题,什么是最好的和最快的方式/工具来学习gnuplot?

回答

2

这应该是一个扩展我的回答对您的其他问题drawing duplicated points in gnuplot with small margin

你需要有解释为时间数据的第一列。为此,您需要

set xdata time 
set timefmt '%Y-%m-%d' 

为了设置点的颜色,最好是确定一个调色板,然后用linecolor palette,这都将根据其在调色板值的点的颜色。

因此,使用说明从drawing duplicated points in gnuplot with small margin最终的脚本是:

reset 
filename = 'data.dat' 

stats filename using 4 nooutput 

set xdata time 
set timefmt '%Y-%m-%d' 

set format x '%Y-%m' 

rand_x(x) = x + 60*60*24*7 * (rand(0) - 0.5) 
rand_y(y) = y + (rand(0) - 0.5) 

plot for [i=0:int(STATS_max)-1] filename \ 
    using (rand_x(timecolumn(1))):(i < $4 ? rand_y($2) : 1/0):3 pointtype 7 linecolor palette notitle 

,你心里一定有一些其他的东西:

  1. stats调用一定要来set xdata time之前,因为统计不要使用时间数据。
  2. 当使用using声明中的时间数据进行计算时,需要使用timecolumn函数(与通用情况下的column$..相反)。这将时间作为时间戳(即以秒为单位)。
  3. 因为这个原因,对于xy,您需要两个不同的随机函数,因为缩放比例非常不同。在这里,我在时间轴上使用了一周的“抖动”(60*60*24*7秒)。

与4.6.4结果是:

enter image description here

关于学习gnuplot一些言论,你的问题:尽量解决您的问题自己,然后发布更具体的问题!浏览gnuplot演示以查看可能的情况,查看使用哪种功能或绘图样式,在文档中查找它们,提供哪些选项/设置?玩这些演示,并尝试应用到你的数据集等最后它的所有关于实践(我已经使用gnuplot 12年了...)。

+0

thx很多,你只是惊人的,你帮了我很多。真的很感激:)我会尽我所能去做你告诉我的:) –

+0

我应用了你上面写的东西,它的功能就像一个魅力,但视图不适合我的数据。我添加了这两个命令: set xrange [GPVAL_DATA_X_MIN:GPVAL_DATA_X_MAX] set yrange [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX] 但它不适用于我! 任何线索? –

+0

这些变量只有在'plot'命令后才可用,请参阅'help gnuplot-defined'。所以你可以做'设置终端推送;设置终端不明;情节......;设置终端弹出; replot',或者读取'set autoscale'和'set offset'。 – Christoph