2016-07-03 3 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') 

По оси х выглядит следующим образом: enter image description here

Поскольку S-значения очень далеки друг от друга, я использовал логарифмическая ось Х (и линейная ось Y). У меня на оси 5 значения (см. S), и мне нужны только те 5 значений, которые видны на оси х с равноудаленным расстоянием между значениями. Как мне это сделать? Или есть лучшая альтернатива отображению оси x, а не логарифмической шкалы?

+0

Один из способов сделать это использовать цифры от 1: 5 до участка как значения х. Затем измените маркировку метки метки оси, чтобы указать эти значения. Есть ли другой, лучший способ? –

+0

Нет необходимости в цикле 'for' и' set', просто напишите 'semilogx (S, H)' – EBH

ответ

1

Если вы хотите, чтобы тики X-axis были одинаково отдалены, хотя они не являются (ни на линейной, ни на шкале журнала), вы в основном относитесь к этой оси как к категоричной, а затем она должна получать и порядковое временное значение (скажем 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 это самый простой способ решить эту проблему;)