2

我在 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(日期)

第二栏;是的

第三栏;点颜色

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

我需要编写一个 gnuplot 程序:

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

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

4

1 回答 1

2

这应该是我对您的其他问题的回答的扩展,在 gnuplot 中以小边距绘制重复点

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

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

为了设置点颜色,最好定义一个调色板,然后使用linecolor palette,它根据它在调色板中的值设置点颜色。

因此,使用在 gnuplot 中以小边距绘制重复点的解释,最终脚本是:

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 的结果是:

在此处输入图像描述

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

于 2013-10-18T13:09:36.550 回答