- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望 gnuplot 只对给定范围的数据执行统计功能。
我的数据如下:
24.12.2014-08:00,34,35,44
25.12.2014-08:00,33,35,44
26.12.2014-08:00,32,32,48
27.12.2014-08:00,31,36,41
28.12.2014-08:00,34,35,44
现在我的剧情脚本中有这个:
...
set datafile separator ","
stats 'out.csv' u 2 prefix "A"
set xdata time
set timefmt "%d.%m.%Y-%H:%M"
set format x "%d.%m"
set xrange["24.12.2014":"28.12.2014"]
set label 1 gprintf("Max = %g", A_max) font "-Bold" at "24.12.2014",A_max-1
...
但这会计算所有日期的统计数据。但我只需要从 26.12 到 28.12 的范围进行统计计算,而我的实际图表需要整个范围,因为我想在不同的时间段统计中拆分我的图表。
最佳答案
stats 函数不喜欢时间数据†,但您可以使用各种函数来强制它使用时间数据来处理时间。提供了执行此操作的两种方法。
startrange = strptime("%d.%m.%Y","26.12.2014")
endrange = strptime("%d.%m.%Y","29.12.2014")
validdate(x) = (curdate=strptime("%d.%m.%Y-%H:%M",x),curdate>=startrange&&curdate<endrange)
stats 'out.csv' u (validdate(strcol(1))?$2:1/0) prefix "A"
产生
* FILE:
Records: 3
Out of range: 0
Invalid: 2
Blank: 0
Data Blocks: 1
* COLUMN:
Mean: 32.3333
Std Dev: 1.2472
Sample StdDev: 1.5275
Skewness: 0.3818
Kurtosis: 1.5000
Avg Dev: 1.1111
Sum: 97.0000
Sum Sq.: 3141.0000
Mean Err.: 0.7201
Std Dev Err.: 0.5092
Skewness Err.: 1.4142
Kurtosis Err.: 2.8284
Minimum: 31.0000 [1]
Maximum: 34.0000 [2]
Quartile: 31.0000
Median: 32.0000
Quartile: 34.0000
在您的示例数据上(前两行超出范围,后三行不在范围内)。这里我们强制超出范围的值无效,因此我们显示 0 超出范围。
它的工作方式是我们使用 strptime 函数将日期转换为内部表示(在 gnuplot 5 中,这是自 Unix 纪元以来的秒数,并且是自 2000 年 1 月 1 日以来的秒数在之前的版本中)。前两行因此得到 2014 年 12 月 26 日午夜和 2014 年 12 月 29 日午夜的内部值(我们调整到第二天,以便我们可以适应整个 12 月 28 日的范围)。
有效日期函数将感兴趣的日期转换为内部表示并将其与这些标记进行比较。如果它在范围内,我们返回 1(真),否则返回 0(假)。请注意,第一个比较使用大于或等于来测试日期是否至少等于开始日期的午夜,第二个比较使用严格小于来检查日期是否在第二天开始之前。如果您在那些日子里有特定的时间,可以稍作修改。
最后,我们对条件值运行 stats 命令。如果第一列中的日期(我们需要使用 strcol 函数将其作为字符串加载以提供给 validdate 函数)在范围内,我们将使用第二列值。如果日期不在范围内,我们将使用无效值 1/0。 stats 函数不会在其分析中使用无效值。
此外,如果方便的话,我们可以接受开始和结束日期作为函数中的参数:
validdate(x,start,end) = (startrange=strptime("%d.%m.%Y",start),endrange=strptime("%d.%m.%Y",end),curdate=strptime("%d.%m.%Y-%H:%M",x),curdate>=startrange&&curdate<endrange)
然后像这样调用统计函数
stats 'out.csv' u (validdate(strcol(1),"26.12.2014","29.12.2014")?$2:1/0) prefix "A"
Gnuplot 有一个时间列函数,可以将列读取为时间和日期。这为我们提供了一种更简单但不一定那么强大的替代方法。
我们可以做到
set timefmt "%d.%m.%Y-%H:%M"
stats [startrange:endrange] 'out.csv' u (timecolumn(1)):2
这将使用 timefmt 读取第一列作为时间。‡
这个版本的工作原理与上面的类似,除了接受而不是拒绝结束范围值(如果我们需要对日期和时间进行更复杂的测试,上面的版本更强大)并且丢弃的值列为“超出范围” ”而不是“无效”。
我们还可以使用内联方式指定开始和结束范围
stats [strptime("%d.%m.%Y","26.12.2014"):strptime("%d.%m.%Y","29.12.2014")] 'out.csv' u (timecolumn(1)):2
† 请注意,您不得在时间模式下使用统计功能,否则它只会报错。因此,上述代码必须在调用 set xdata time
之前运行,或者在使用 set xdata
恢复正常模式之后运行。
‡ 在版本 5 中,timecolumn 函数还可以使用一个附加参数来指定要使用的格式(如 timecolumn(1,"%d. %m.%Y-%H:%M")
而不是使用 timefmt 命令,在这种情况下不需要)
请注意,在版本 5 中,仅记录了两个参数形式,文档中仅将一个参数形式作为以前的格式提及,而不是作为可接受的替代形式。单参数形式现在继续工作,但是,由于它仅作为以前的格式列出,而不是可接受的替代格式,因此单参数形式可能会在以后的某个版本中停止工作。但是,我希望这不太可能发生,因为 gnuplot 倾向于保持向后兼容性,并且单参数形式在上述情况下很有用(因此时间格式规范只能出现在脚本中的一个地方)。
关于statistics - gnuplot 统计范围可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36257643/
我有以下类型的文件: ... 我想从 (x,y) 值绘制一个散点图,在不同数据集中的第一列中有不同的字符串,这些字符串将用不同的颜色绘制(我有许多不同的 x,y 值但只有几个不同的字符串)
有谁知道我如何在 GNU Plot 的条形图顶部放置一组值的折线图?我的条形图工作得很好,但我不知道如何在不同的列上添加折线图。 我100%迷路了!我可以很容易地用 excel 做到这一点,但它看起来
我在 x_i 点有数据点 f(x_i)(函数 f 未知,只有数值),f(0) = 0。数据显示小 x 处的峰状结构,随后是较大 x 处的缓慢肩部衰减设置在最大值的一半。我想通过这些数据点绘制平滑线。
更新:此问题已在较新版本 (>5.0) 的 gnuplot 中解决;请参阅@andyras 的回答。 我很难让 gnuplot 在非 postscript 终端中创建带有粗体和增强文本的标签。下面的脚
你好有没有办法完全重置gnuplot,即在中使用gnuplot同 状态为刚刚启动后? Reset 不会终止变量或函数, undefine 不能用作“undefine *”,因为第一个字符必须是字母。
我想用彩色背景和图案填充条形图。在Gnuplot中有可能吗? 我正在使用Gnuplot 4.6.5 我现在拥有的代码: # set terminal pngcairo transparent enh
我想用 gnuplot 做一个条形图。 我使用了这个设置 set style data boxes set style fill solid plot 'foo.dat' using 1:2:(1)
在 gnuplot 中,给定 f 和 g 两个从平面到实线的函数,我将在 g 获得正值时绘制 f。我有这个代码: set xrange [-2:2] set yrange [-2:2] set iso
只是想习惯 gnuplot。我在这个网站上搜索了几页寻找答案,阅读了文档(4.6),但仍然没有找到答案。说我有一个这样的数据文件: 0.0 0 1.0 25 2.0 55 3.0 110 4.0 45
我刚开始使用 gnuplot,我已经关注了 this question它根据我的需要绘制数据。但是,我非常想也包括错误栏。我尝试通过添加最小和最大错误列来做到这一点,如下所示: Broswer,Vid
我有一个包含30列和N行的数据文件。每行对应于x = {1,...,30}的函数f(x)的30个值。数据文件具有以下模式: # f(1) f(2) ... f(30) 1 7.221 5.302 ..
我正在绘制一些具有不同X范围的数据,我想根据当前X范围内数据的最大值和最小值更改yrange。当我使用GPVAL_Y_MAX和GPVAL_Y_MIN时,这些值对应于整个数据的最大值和最小值,而不仅仅是
我尝试搜索,但是找不到针对此特定条件的解决方案。在我的情节中,我正在比较两条痕迹。我正在使用折线图,并且两条迹线都以不同的颜色绘制。 plot "delay_try1.dat" using 1:2 t
我有一个非常简单的数据集: Critical 2 High 18 Medium 5 Low 14 根据该数据集在 gnuplot 中创建条形图很容易,但所有条形图的颜色都相同。我希望将 Critica
我正在使用 gnuplot 创建两个相邻的图。我想给整个事情一个标题,但如果我使用标准的 set title "blah" 命令,我会得到两个标题 - 每个图一个。我怎样才能只获得一个标题(位于图上方
我正在尝试在 gnuplot 中绘制水平直方图。 这是我当前的垂直(通常类型)直方图: width=0.5 hist(x,width)=width*floor(x/width)+width/2.0 s
我想在 gnuplot 中绘制多个有界函数。 IE。绘制从 0 到 2 的 x 和从 1 到 3 的 x^2 并将它们一起显示。 如何绘制具有不同界限的函数? 我知道如何执行分段函数,例如 (x <
例如,给定以下数据文件(本例中为 x^2): 0 1 4 9 16 25 gnuplot 可以绘制点以及点之间的差异,就像这样: 0 0 1 1 # ( 1 - 0 = 1) 4 3 # (
我正在尝试尝试一些简单的回归线作为 gnuplot 图的基础。然而,无论我做什么,我都无法在图表上得到多于一条的拟合线。这可能吗?这是我的(当前)gnuplot 程序...... set title
有什么方法可以迭代地从多个文件中检索数据并将它们绘制在 gnuplot 中的同一个图表上。假设我有像data1.txt,data2.txt......data1000.txt这样的文件;每个都有相同数
我是一名优秀的程序员,十分优秀!