2016-11-26 49 views
0

我對gnuplot很新,所以我很感謝每一個建議。使用logscale時gnuplot xtics消食

現在,我正在嘗試使用logscale命令繪製一些數據。但我不知道爲什麼當我使用logscale時,所有的xtics都消失了。這是我使用的腳本:

#creates a plot of all the four different loops with a logscale. Fits the functions as well and saves the fitting data 
#in a file named fitting.dat 

set size 1,1 
# set logscale 
set logscale y 10 
set logscale x 10 
#set xlabel and y label 
set xlabel "Dimension of Matrix" 
set ylabel "time [s]" 
#scale plot 
set xrange [450:850] 
set yrange[0.01:5] 
#nothing displayed from fitting 
set fit quiet 
#position of legend 
set key top right 
set key horizontal 
# guessing the parameters, the fit will be better and we know that the exponent should be \approx 3 
b=3 
d=3 
f=3 
h=3 
#Define all th four different data fitting functions, asuming f(x) ~ a*x^b 
f(x)= a*x**b 
g(x)=c*x**d 
h(x)=e*x**f 
j(x)=g*x**h 

#fit the different functions 
fit f(x) 'matmul.txt' using 1:2 via a,b 
fit g(x) 'matmul.txt' using 1:3 via c,d 
fit h(x) 'matmul.txt' using 1:4 via e,f 
fit j(x) 'matmul.txt' using 1:5 via g,h 
# save the fitting parameters in an extra file 
set print 'fitting.dat' 
    print 'function' 
    print a,'*x', '**', b , '  rows' 
    print c,'*x', '**', d , '  cols' 
    print e,'*x', '**', f , '  intrinsic function' 
    print g,'*x', '**', h , '  lapack routine' 

# plot everything 
plot "matmul.txt" u 1:2 t "rows" ,\ 
    "matmul.txt" u 1:3 t "cols" ,\ 
    "matmul.txt" u 1:4 t "intrinsic" ,\ 
    "matmul.txt" u 1:5 t "lapack" ,\ 
    f(x) t sprintf("row:%.2e*x^(%.2f)", a,b),\ 
    g(x) t sprintf("col:%.2e*x^(%.2f)",c,d),\ 
    h(x) t sprintf("int:%.2e*x^(%.2f)",e,f),\ 
    j(x) t sprintf("lap:%.2e*x^(%.2f)",g,h) 
#choose output format 
set terminal png 
set output "time.png" 
replot 
#now, non-logarithmic plot 
#unset logscale 
set yrange[0.01:1] 
unset logscale 
#plot again 
plot "matmul.txt" u 1:2 t "rows" ,\ 
    "matmul.txt" u 1:3 t "cols" ,\ 
    "matmul.txt" u 1:4 t "intrinsic" ,\ 
    "matmul.txt" u 1:5 t "lapack" ,\ 
    f(x) t sprintf("col:%.2e*x^(%.2f)", a,b),\ 
    g(x) t sprintf("row:%.2e*x^(%.2f)",c,d),\ 
    h(x) t sprintf("int:%.2e*x^(%.2f)",e,f),\ 
    j(x) t sprintf("lap%.2e*x^(%.2f)",g,h) 

我輸入文件「matmul.txt」看起來是這樣的:

#Dim rows  cols  intrinsic lapack 
500 0.1320E+00 0.1040E+00 0.6800E-01 0.2000E-01 
520 0.1400E+00 0.1320E+00 0.5600E-01 0.2000E-01 
540 0.1480E+00 0.1400E+00 0.6000E-01 0.3200E-01 
560 0.1680E+00 0.1480E+00 0.7200E-01 0.2400E-01 
580 0.1800E+00 0.1680E+00 0.6800E-01 0.3200E-01 
600 0.1920E+00 0.1960E+00 0.7200E-01 0.3600E-01 
620 0.2080E+00 0.2040E+00 0.9600E-01 0.2000E-01 
640 0.4000E+00 0.3520E+00 0.8400E-01 0.3200E-01 
... 

現在,如果我運行這個文件,我得到以下輸出plot

我不知道爲什麼,但是yscale的範圍不正確,並且不顯示xtics。如果我沒有'logscale'來繪製它,情節就是我想要的。爲什麼這不起作用?

+0

要跟蹤下來,請你縮短腳本來最低,你可以看到這一點:一個單一的情節,沒有裝修,沒有印刷等BTW:爲什麼你是否爲單張圖像繪製三次? 'set terminal ... set output ... plot',done。 – Christoph

回答

0

您的x軸橫跨不到十年,默認的主要頻率是十年。如果你想在這個範圍內標記tics,使用set xtics (400,500,600,700,800)或任何你想要的。

這是所有在documentation,只需搜索

+0

TIC標籤必須在括號內給出。沒有括號,gnuplot會將'400,500,600'解釋爲'start,increment,end'。 ',700,800'會導致錯誤,至少在gnuplot 4.6時會出錯。 – maij

+0

是的,你是正確的感謝 –

0

抽動在對數圖不是由一個被加數恆定那樣分離1,2,3,...,它們通過恆定分離「logscale」因子在1,10,100,...

這意味着在你的情況y軸:你已經給出了範圍[0.01:5],導致在0.01,0.1,1的抽搐,因爲它是在圖片中看到。大於1時,在2,3,4和5處有較小的抽搐。5是該範圍中指定的圖形的上邊界。也有在這個抽動的標籤,只是添加:

set ytics add (5) 

或改變yrange到

set yrange [0.01:1] 
set yrange [0.01:10] 

爲了您xtics一個:標籤會在1,10,100,1000 ,...但你的範圍是從450到850:裏面沒有標記的xtic。

同樣,你可以手動設置:

set xtics (450, 550, 650, 750, 850)