有時,我們的數據文件中各個數據之間是用逗號作為分隔符的,比如標準的以“CSV”為后綴的那種數據文件。如果在逗號之后沒有空格分隔,默認情況下gnuplot是無法直接讀取的。
這時可以有兩種方案,第一種是提前處理一下數據文件,比如將逗號替換為空格,隨便一個文本處理軟件都能很輕松的做這種替換。但是有時我們有很多這樣的數據文件,每個都這樣處理一下也挺麻煩的。
第二種方法就是在gnuplot中給出文件分隔符的信息,讓gnuplot能夠讀懂我們的文件。下面將要說的就是這種方法。
比如我們有如下的文件:
~~~
-3,0.1,0.0001234098
-2.9,0.1062699256,0.0002226299
-2.8,0.1131221719,0.000393669
-2.7,0.1206272618,0.0006823281
-2.6,0.1288659794,0.0011592292
-2.5,0.1379310345,0.0019304541
-2.4,0.1479289941,0.0031511116
-2.3,0.1589825119,0.0050417603
-2.2,0.1712328767,0.0079070541
-2.1,0.1848428835,0.0121551783
-2,0.2,0.0183156389
-1.9,0.2169197397,0.0270518469
-1.8,0.2358490566,0.0391638951
-1.7,0.2570694087,0.0555762126
-1.6,0.2808988764,0.0773047404
-1.5,0.3076923077,0.1053992246
-1.4,0.3378378378,0.1408584209
-1.3,0.3717472119,0.184519524
-1.2,0.4098360656,0.2369277587
-1.1,0.4524886878,0.2981972794
-1,0.5,0.3678794412
-0.9,0.5524861878,0.4448580662
-0.8,0.6097560976,0.527292424
-0.7,0.6711409396,0.6126263942
-0.6,0.7352941176,0.6976763261
-0.5,0.8,0.7788007831
-0.4,0.8620689655,0.852143789
-0.3,0.9174311927,0.9139311853
-0.2,0.9615384615,0.9607894392
-0.1,0.9900990099,0.9900498337
0,1,1
0.1,0.9900990099,0.9900498337
0.2,0.9615384615,0.9607894392
0.3,0.9174311927,0.9139311853
0.4,0.8620689655,0.852143789
0.5,0.8,0.7788007831
0.6,0.7352941176,0.6976763261
0.7,0.6711409396,0.6126263942
0.8,0.6097560976,0.527292424
0.9,0.5524861878,0.4448580662
1,0.5,0.3678794412
1.1,0.4524886878,0.2981972794
1.2,0.4098360656,0.2369277587
1.3,0.3717472119,0.184519524
1.4,0.3378378378,0.1408584209
1.5,0.3076923077,0.1053992246
1.6,0.2808988764,0.0773047404
1.7,0.2570694087,0.0555762126
1.8,0.2358490566,0.0391638951
1.9,0.2169197397,0.0270518469
2,0.2,0.0183156389
2.1,0.1848428835,0.0121551783
2.2,0.1712328767,0.0079070541
2.3,0.1589825119,0.0050417603
2.4,0.1479289941,0.0031511116
2.5,0.1379310345,0.0019304541
2.6,0.1288659794,0.0011592292
2.7,0.1206272618,0.0006823281
2.8,0.1131221719,0.000393669
2.9,0.1062699256,0.0002226299
3,0.1,0.0001234098
~~~
可以看到,數據有三列,用逗號來分隔,我們下面的例子中之用到前兩列。如果直接用如下命令的話得到的不是我們希望的結果。
~~~
Plot 'sample.csv'
~~~

gnuplot 只解析出了第一列的數據。如果我們告訴gnuplot我們的數據有兩列會怎樣呢?
~~~
Plot 'sample.csv' using 1:2
~~~
gnuplot 會抱怨說:
~~~
gnuplot> plot 'sample.csv' using 1:2
^
warning: Skipping data file with no valid points
^
x range is invalid
~~~
正確的方法是這樣的:
plot 'sample.csv' using 1:2 "%lf,%lf"

格式字符串的格式與C語言中scanf的格式字符串是類似的,實際上gnuplot最后就是用的scanf函數來讀取數據。%lf表示按照 double型浮點數類型來讀取。需要注意的是gnuplot的格式化字符串不支持%f。
gnuplot的格式化字符串還有很多的用法,這里就不多介紹了,有興趣的可以參考幫助文檔相關章節。
- 前言
- gnuplot 中的數據平滑
- 利用 Maxima 求解常微分方程
- Maxima 的繪圖功能 1
- Maxima 的繪圖功能 2
- Maxima 的繪圖功能 3
- Maxima 矩陣及矢量運算 1
- Maxima 矩陣及矢量運算 3
- Maxima 矩陣及矢量運算 4
- maxima 學習筆記(coeff 函數的應用)
- maxima 代數表達式變換
- maxima 學習筆記(基本微積分)
- maxima 代數方程求解
- Maxima 中的復數運算
- Maxima 的三角函數化簡功能
- Maxima 的基本微積分操作
- 利用 gnuplot 繪制時間序列圖
- gnuplot 入門教程 1
- gnuplot 入門教程 2
- gnuplot 入門教程 3
- gnuplot 入門教程 4
- gnuplot 讀取逗號分隔的數據文件
- scilab 讀取處理 wav 文件
- scilab 讀取處理 wav 文件 (2)
- Scilab 處理聲音數據(補充)
- 利用 SCILAB 設計 FIR 濾波器(窗函數法)
- 利用 SCILAB 設計 FIR 濾波器(Minimax法)
- 利用 SCILAB 設計 iir 濾波器設計(模擬濾波器雙線性變換法)
- Scilab 的繪圖函數(1)
- Scilab 的繪圖函數(2)
- Scilab 的繪圖函數(3)
- Scilab 的繪圖函數(4)