gnuplot,绘制重复点和着色

时间:2013-10-18 12:44:29

标签: 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

第1栏; x(日期)

第二栏; ÿ

第3栏;点颜色

第4栏;出现次数(该点重复)

我需要编写一个gnuplot程序:

  1. 绘制我的(x,y)点。
  2. 根据第3列值(可能超过50种不同的颜色)为每个点提供不同的颜色。
  3. 如果第4列大于0,那么该点是重复的,必须绘制n次并给它的x,y随机定位,边距较小。例如,(rand(x)-0.5,rand(y)-0.5)。
  4. 另一个问题是,学习gnuplot的最佳和最快的方法/工具是什么?

1 个答案:

答案 0 :(得分: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. 4.6.4的结果是:

    enter image description here

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