2016-07-03 39 views
1

我有以下代碼:Logaritmic規模

S = [100 200 500 1000 10000]; 
H = [0.14 0.15 0.17 0.19 0.28;0.14 0.16 0.18 0.20 0.29;0.15 0.17 0.19 0.21 0.31;0.16 0.17 0.20 0.22 0.32;0.23 0.22 0.28 0.30 0.44;0.23 0.23 0.29 0.3 0.5;0.33 0.32 0.4 0.42 0.63;0.32 0.31 0.39 0.40 0.61;0.23 0.23 0.30 0.30 0.50]; 
for i = 1:9 
    hold on 
plot(S, H(i,:)); 
legend('GHM01','GHM02','GHM03','GHM04','GHM05','GHM06','GHM07','GHM08','GHM09'); %legend not correctly 
axis([100 10000 0.1 1]) 
end 
set(gca,'xscale','log') 

x軸看起來像這樣: enter image description here

因爲S-值非常遠離彼此,我用一個對數x軸(和線性y軸)。 我在軸上有5個值(見S),而我只希望這些5個值在x軸上可見,其值在等距間距之間。我該怎麼做呢?還是有更好的選擇來顯示我的X軸,而不是對數尺度?

+0

一種方法做的是使用數字1:5至陰謀作爲x值。然後更改軸刻度標記以指示這些值。還有更好的方法嗎? –

+0

不需要'for'循環和'set'函數,只需編寫'semilogx(S,H)' – EBH

回答

1

如果您希望X軸刻度儘管不是(既不是線性也不是對數刻度),那麼您基本上將該軸視爲分類,然後它應該獲得序數臨時值(說1:5)來確定他們之間的距離。

這裏是一個快速實現你上面的評論:

S = {'100' '200' '500' '1000' '10000'}; 
H = [0.14 0.15 0.17 0.19 0.28;... 
    0.14 0.16 0.18 0.20 0.29; 
    0.15 0.17 0.19 0.21 0.31; 
    0.16 0.17 0.20 0.22 0.32; 
    0.23 0.22 0.28 0.30 0.44; 
    0.23 0.23 0.29 0.3 0.5; 
    0.33 0.32 0.4 0.42 0.63; 
    0.32 0.31 0.39 0.40 0.61; 
    0.23 0.23 0.30 0.30 0.50]; 
f = figure; 
plot(1:length(S),H); 
f.Children.XTick = 1:length(S); 
f.Children.XTickLabel = S; 

TMHO這是解決這一問題的最直接的方式;)