我想绘制一些数据。数据在几个文件中,并且所在的行并不总是相同。因此,我使用了grep和其他一些命令行工具来提取所需的行。我在网上阅读,使用gnuplot应该可以从字符串或命令行结果中进行打印。
我在linux中工作。
set terminal pdfcairo enhanced font "Garamond,10" fontscale 1.0 size 9in,9in
set nogrid
set samples 1001
set border 31 linewidth .3
set output "access/accessTimeAcrossFreq.pdf"
set xlabel "freq"
set ylabel "Time [s]"
set key right top
set size square
set autoscale y
set termoption lw 2.5
volts = "0.8"
fins = "111 122 222"
freq = "0.5G 1G 1.5G 2G 2.5G 3G"
metrics = "read1bldeltav read0bldeltav read1senseChange read0senseChange read1latchChange read0latchChange sense1speed sense0speed write1CellFlip write0CellFLip write1CellSwing write0CellSwing write1BLSwing write0BLSwing powerpertime"
runTitle = "abetraryString"
filename(fin, f, volt) = sprintf("../%s_temp27_fin%s_freq%s_vdd%s/accessTimeVolLSA/result.txt", runTitle, fin, f, volt)
data(met, file) = system(sprintf("grep -n '%s' %s | cut -d: -f 2 | awk '{$1=$1};1'", met, file))
com(met, file) = sprintf("< grep -n '%s' %s | cut -d: -f 2 | awk '{$1=$1};1'", met, file)
do for [fin in fins] {
do for [v in volts] {
do for [met in metrics] {
set title sprintf("%s VLSA across Freq, fins %s, %sV, w/o she", met, fin, v)
plot for[i=1:words(freq)] com(met, filename(fin, word(freq, i), v)) using (i):2:xtic(word(freq, i)) notitle with points lc i
}
}
}
所以我想知道是否a)我可以拥有一个返回字符串的函数,该函数是由gnuplot运行的命令 b)错误可能来自哪里:
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: x range is invalid
我想,也许我需要在一行数据的结尾处换行。还是因为gnuplot始终认为第一行不是数据...我不知道。
答案 0 :(得分:0)
今天我想通了。我在for循环中使用了prints来查看命令返回的内容。在发布问题之前,我在单独的终端中成功尝试了该命令。问题是我刚刚使用metrics
的第一个元素对其进行了测试。指纹显示我忘记了metrics
必须全部小写。
总结。是的,您可以通过函数将一个字符串放在一起,然后gnuplot将按照我的期望运行它。请参见在情节行中使用com(..)
。
第二。我认为xrange错误通常指出在图中没有数据点,并且gnuplot不喜欢xrange为0。为了弄清楚这一点,我使用了打印件。我快速搜索了是否有详细模式,但没有成功,因此将其打印出来。
也许有人可以带走我一样的东西。