数据
ID BlockSize Size Blocks
- 511.991 241520288 471728
001 511.868 24152000 47184
0001 503.2 241520 480
00001 510.829 2415200 4728
000001 511.360 4782240 9352
0000001 486.935 120760 248
000 511.889 24103840 47088
0000 493.265 193360 392
00000 511.019 2367040 4632
000000 511.262 4830400 9448
0000000 483.4 96680 200
我想要的地方
- 第 3:4 列用于绘图
- 从第 2:6 行绘制一张图
- 另一个从 7:11 开始
我的开始是基于此博客文章
set terminal qt;
plot "<(sed -n '2,6p' sandboxgp.data)" using 3:4 with lines;
plot "<(sed -n '7,11p' sandboxgp.data)" using 3:4 with lines;
它只给你一张图表。
马可的输出
为了清楚起见,我将对数刻度放在 y 轴上,其中一些代码基于此回答
set terminal qt;
plot "<(sed -n '2,6p' sandbox_gp_pure.data)" using 3:4 with linespoints;
replot "<(sed -n '7,11p' sandbox_gp_pure.data)" using 3:4 with linespoints;
set logscale y 10;
set xlabel "Size"; set ylabel "log(Blocks)";
set grid xtics ytics mxtics mytics lc rgb 'blue' lt 1, lc rgb 'red' lt 1; set mxtics; set mytics 5;
set out;
给予
答案1
不要使用命令replot
,而是使用逗号,
由于在您的脚本中我没有看到明显的理由需要使用该replot
命令,因此我建议直接使用逗号,
来分隔要绘制的两条曲线:plot sin(x), cos(x)
例如。
把它当作一个好习惯,但它更多的是,原则上是不同的(见下文)。
您可能会发现将\
作为最后一个字符来分割单行很有趣(请注意,它要求后面没有空格或其他字符)。它使脚本更加干净。
# ...
set style data linespoint # To avoid to repeat it on each line of plot command
# Note below no spaces after the `\`
plot "<(sed -n '2,6p' sandbox_gp_pure.data)" using 3:4 \
, "<(sed -n '7,11p' sandbox_gp_pure.data)" using 3:4
用replot
命令代替你再次绘制每条曲线已经存在于图形上(重新读取数据并再次执行所有以下操作)并且仅后您绘制新曲线。
这是一个好习惯,因为明天再次使用你的脚本,你可以有一个通用的减速当文件很多、很大或位于远程文件系统时,您的工作流程;当您执行长时间操作来处理数据时;当有效绘制的点很多并且您正在通过连接工作时,您需要等待窗口的图形更新更多 ssh -X
...
此外,在终端pdfcairo
中
set terminal pdfcairo; set output 'my.pdf' ;
plot sin(x)
replot cos(x)
set output ; set terminal qt # or whatever is your default terminal
您将获得一个 2 页的文档和一个更大的 pdf 文件。
注意:您可以使用该every
关键字,而无需创建子shell()
并调用外部程序,例如sed
.如果你不能预购他们与种类,您可以添加以下样式smooth unique
来绘制数据集linespoints
爱按x
坐标排序的条目。
plot "sandbox_gp_pure.data" every ::1::5 us 3:4 t "set 1" w linesp \
, '' every ::6::10 us 3:4 t "set 2" w linesp
或者如果您想要订购它们
plot "sandbox_gp_pure.data" every ::1::5 u 3:4 smooth unique t "set 1" w linesp\
, '' every ::6::10 u 3:4 smooth unique t "set 2" w linesp
sed
另一个优点是可移植性。它甚至可以在没有安装的地方工作,甚至可以在 Windows 下工作。
您可以注意到电话号码这是因为它从 开始0
。
每个块中的第一个数据编号为“0”,文件中的第一个块也是如此。
这gnuplot help replot
输出:
不带参数的命令
replot
重复最后一个plot
orsplot
命令。这对于查看具有不同set
选项的绘图或为多个设备生成相同的绘图时非常有用。命令后指定的参数
replot
将添加到最后一个plot
或splot
命令 (带有隐含的“,”分隔符)在重复之前。
答案2
使用replot
而不是plot
第二个图。那么它就不会覆盖第一个图。
# will plot one graph
gnuplot -p -e 'plot sin(x); plot cos(x)'
# will plot two graphs
gnuplot -p -e 'plot sin(x); replot cos(x)'