Plot x轴对数标度

Plot x轴对数标度,plot,graph,label,matlab-figure,axis-labels,Plot,Graph,Label,Matlab Figure,Axis Labels,我有以下代码: 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

我有以下代码:

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轴如下所示:

因为S值彼此相差很远,所以我使用对数x轴(和线性y轴)。
我在轴上有5个值(请参见S),我只希望这5个值在x轴上可见,且值之间的间距相等。我该怎么做?或者有更好的替代方法来显示我的x轴,而不是对数刻度吗?

如果您希望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;

这是解决这个问题最直接的方法;)

一种方法是使用数字1:5绘制x值。然后更改轴记号标记标签以指示这些值。还有其他更好的方法吗?不需要
for
循环和
set
函数,只需编写
semilogx(S,H)