对于不等间隔的值,等间隔的x值

问题描述 投票:0回答:2

我试图显示一个离散的图,其中x轴上的值不是同等空间但我希望它们看起来等间距。我想要一个第一根棒不在y轴上的茎图,我也想在y = 1处有一条水平虚线。

到目前为止,这是我尝试过的。

x = [10 50 150 3000];
y = [.6 .754 .853 .954]; 
xv = [1 2 3 4];
stem(xv,y);
set(gca,'XTickLabel',x);

不幸的是,这不是我的预期。 x轴上的值不正确,并且棒从y轴开始并在图边缘结束。我怎样才能解决这个问题?

matlab plot axis
2个回答
2
投票

编辑:我最初忘记了水平虚线。添加了这个。


你只需要两个小小的补充:

x = [10 50 150 3000];
y = [.6 .754 .853 .954]; 
xv = [1 2 3 4];
stem(xv, y);
xlim([min(xv)-1 max(xv)+1]);   % <--
set(gca, 'xtick', xv);         % <--
set(gca, 'xticklabel', x);

您(还)需要显式设置xtick选项,以便只绘制这些刻度,而不绘制其他刻度。

使用xlim,您可以操纵x轴限制。 (左右限制可能会根据您的需要进行修改。)

要添加水平虚线,只需在末尾添加以下内容:

hold on;
plot([min(xv)-1 max(xv)+1], [1 1], 'k--');
hold off;

(线的起点和终点可能会根据您的需要进行修改。)

从Matlab R2018b开始,你也可以使用yline

然后输出如下所示:

enter image description here


1
投票

如果您想要绘制一系列值,而不需要对每个值实际具有什么特殊处理,则您实际上定义了一组类别。

如果你明确地将值声明为categorical,那么MATLAB很好地处理它们而没有任何额外的诡计将它们统一地布置在你的轴上。

因此,您所需要的只是:

x = [10 50 150 3000];
y = [.6 .754 .853 .954]; 
stem(categorical(x),y);
yline(1,'--');
ylim([0 1.5]) % Make some space on the y-axis so the horizontal line doesn't sit on the top edge

Result

© www.soinside.com 2019 - 2024. All rights reserved.