2016-07-03 12 views
1

Ich habe den folgenden Code:logarithmische Skala in x-Achse

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') 

Die x-Achse wie folgt aussieht: enter image description here

Da die S-Werte sind sehr weit voneinander entfernt, habe ich eine logarithmische x-Achse (und lineare y-Achse). Ich habe auf der Achse 5 Werte (siehe S), und ich möchte nur diese 5 Werte auf der x-Achse mit äquidistanten Abstand zwischen den Werten sichtbar. Wie mache ich das? Oder gibt es eine bessere Alternative zur Darstellung meiner X-Achse als der logarithmischen Skala?

+0

Eine Möglichkeit ist, zu tun, die Zahlen 1 verwenden: 5 bis Grundstück als die x-Werte. Ändern Sie dann die Achsenmarkierung, um diese Werte anzugeben. Gibt es einen anderen, besseren Weg? –

+0

Keine Notwendigkeit für die 'for' -Schleife und die' set' -Funktion, schreibe einfach 'shalogx (S, H)' – EBH

Antwort

1

Wenn Sie wollen, dass die X-Achsen-Ticks gleich weit entfernt sind, obwohl sie nicht linear oder logarithmisch skaliert sind, behandeln Sie diese Achse grundsätzlich kategorisch und erhalten dann einen ordinalen temporären Wert (sagen 1:5), um den Abstand zwischen ihnen zu bestimmen.

Hier ist eine schnelle Umsetzung Ihres Kommentars oben:

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 dies ist der direkteste Weg, um dieses Problem zu lösen;)