等距x值用于不等距的值

时间:2019-04-24 10:09:42

标签: matlab plot axis

我正在尝试显示一个离散图,其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轴上开始,在图形边缘处结束。 我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分: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 :(得分: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