跟踪手机上的电池放电/充电情况。数据形状类似于' V'。充电百分比和经过时间(以秒为单位),如下所示:
plots=""
my_xrange=0
files=system("ls -1B data/*.csv | sort -k2 -t '-'")
do for [ file in files ] {
this="'".file."' ".'using ($2/3600):1 notitle, '
plots=plots.this
}
eval('plot '.plots)
以下是我处理 n 文件并将它们一起绘制的方式:
stats
(由于链接太多,幸福的情节被忽略了)
然后老板过来说" uphills"分散注意力,我可以只画出" downhills"好吗?不用担心,xrange
会给我最小值,所以我plots=""
my_xrange=0
files=system("ls -1B *.csv | sort -k2 -t '-'")
do for [ file in files ] {
stats file using ($2/3600):1 prefix "STATS" nooutput
if ( STATS_pos_min_y > my_xrange ) { my_xrange = STATS_pos_min_y }
this="'".file."' ".'using ($2/3600):1 notitle, '
plots=plots.this
}
print sprintf( 'stats: plot xrange is %.2f', my_xrange )
set xrange [0:my_xrange]
eval('plot '.plots)
。活泉!
using
我知道那里必须是一种不绘制上坡的方法,所以我最终会以this="'".file."' ".'using (($2/3600) <= STATS_pos_min_y ? $1 : 1/0) notitle, '
为条件。
using
xrange obliterates some uphills
我需要使用2美元/ 3600美元,因为我希望以小时数表示事物。哦,当然,我可以编写一个脚本来按摩数据,甚至在它进入gnuplot之前,但是它承认了失败。
我在使用{{1}}时没有理解什么?
答案 0 :(得分:2)
整个数据的绘图命令(紫色线)是
plot file using ($2/3600):1 with linespoints
而条件数据(蓝线)的是
plot file using ((($2/3600) <= STATS_pos_min_y) ? $1 : 1/0) with linespoints
此using
语句仅选择($2/3600) <= STATS_pos_min_y
的数据点。但是,您没有指定在x轴上应该绘制那些数据点的位置,因此gnuplot假设它只是数据文件(0,1,2,3,4)中的行号。您必须像在无条件图中一样指定x轴上的位置:
plot file using ($2/3600):((($2/3600) <= STATS_pos_min_y) ? $1 : 1/0) with linespoints
应该这样做。
顺便说一句,格式在SO评论中相当有限。要发布代码,通常最好编辑您有更多格式选项的问题。