如何在 Gnuplot 中為兩個圖繪製特定行?
數據
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;
給予
不要使用該
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
. 如果您無法使用 sort 對它們進行預排序,則可以添加以喜歡按座標排序的條目的樣式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
或splot
命令。這對於查看具有不同set
選項的圖或為多個設備生成相同的圖時很有用。在命令之後指定的參數
replot
將在重複之前添加到最後一個plot
或splot
命令(帶有隱含的“,”分隔符)。