Search code examples
plotgraphlabelmatlab-figureaxis-labels

Logaritmic scale in x-axis


I have the following code:

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

The x-axis looks like this: enter image description here

Because The S-values are very far from each other, I used a logaritmic x-axis (and linear y-axis). I have on the axis 5 values (see S), and I only want those 5 values visible on the x-axis with equidistant spacing between the values. How do I do this? Or is there a better alternative to display my x-axis, rather than logaritmic scale?


Solution

  • If you want the X-axis ticks to be equally distant although they are not (neither on a linear nor on a log scale) then you basically treat this axis as categorical, and then it should get and ordinal temporary value (say 1:5) to determine the distance between them.

    Here is a quick implementation of your comment above:

    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 this is the most straightforward way to solve this problem ;)