Matlab图片中的框和轴坐标

3

我正在尝试在Matlab中绘制一张图片。我希望包括图表框(box on)并且坐标轴的值报告到我设置的限制范围内。例如考虑以下代码:

scatter(-0.5, 0.399, 'c','filled');
box on
axis([-0.504 -0.494 0.397 0.408 ])
legend('A')
xlabel('\gamma_0')
ylabel('\delta_0')
title('N=3') 

现在,您可以看到在垂直轴上,顶部的最后一个刻度没有编号。我不理解为什么会这样。您能帮忙修复一下吗?

3个回答

2

我认为这只是一个可视化问题。如果你想确保限制值被显示出来,可以强制设置刻度值:

scatter(-0.5, 0.399, 'c','filled');
box on
axis([-0.504 -0.494 0.397 0.408 ])

xticks(linspace(-0.504, -0.494, 11)); % Set the ticks vector as a vector of 11 elements from -0.504 to -0.494
yticks(linspace(0.397, 0.408, 11));

legend('A')
xlabel('\gamma_0')
ylabel('\delta_0')
title('N=3') 

我的matlab中的图像

在您的评论中,您指定了只需要三位数字的格式。在格式字符串中,它是'%1.3f'。您还可以强制格式化刻度:

scatter(-0.5, 0.399, 'c','filled');
box on
axis([-0.504 -0.494 0.397 0.408 ])

xtickformat('%1.3f');
ytickformat('%1.3f');
xticks(linspace(-0.504, -0.494, 11)); 
yticks(linspace(0.397, 0.408, 11));

legend('A')
xlabel('\gamma_0')
ylabel('\delta_0')
title('N=3') 

这是结果:

进入图像描述


谢谢,但我不喜欢现在Matlab使用逗号后带4位的刻度线。 - TEX
根据我的代码生成的格式为:y轴0.397,0.398,...,0.408;x轴-0.504,-0.503,...,-0.494。 - TEX
检查答案的最后部分。 - Matteo Ragni
1
我建议不要对刻度标签进行四舍五入,而是对刻度位置进行四舍五入。因为在y轴上,您现在有刻度标签与刻度位置不完全匹配的情况。更好的方法是使用数组0.396:0.002:0.408作为刻度标记。 - Cris Luengo
当然,您必须考虑问题的有效数字位数。我认为OP选择了3。 - Matteo Ragni

2
发生的情况似乎是浮点舍入问题。奇怪的是,Octave恰好也会出现相同的情况。
>> axis([-0.504 -0.494 0.397 0.408 ])
>> t=get(gca,'ytick')
t =
   0.39600   0.39800   0.40000   0.40200   0.40400   0.40600   0.40800

>> l=get(gca,'ylim')
l =
   0.39700   0.40800

>> t(end)-l(end)
ans =
   5.5511e-17

在0.408处有一个勾号,但勾号的位置仍然略高于轴限制,因此它没有显示出来。您可以像Matteo建议的那样显式地设置刻度位置,或显式地设置轴限制。
ylim([0.397,t(end)])

请注意,这里的技巧是使用刻度线的确切位置t(end),而不是常数0.408,它是一个不同的值。

谢谢:我不明白你是如何构造t的。如果我输入t=get(gca,'ytick'),我得到一个从01的向量。 - TEX
如果我运行 scatter(-0.5, 0.399, 'c','filled'); box on ylim([0.397, 0.408]) legend('A') xlabel('\gamma_0') ylabel('\delta_0') title('N=3'),问题并没有得到解决。 - TEX
在输入问题代码后,键入以下命令。gca是当前轴。如果您单击不同的轴,这些轴将变为gca。因此,请确保您在问题中创建的图形是最后一个处于活动状态的图形。 - Cris Luengo
1
是的,这就是重点。 0.408 不是刻度线的位置。刻度线和轴限制在不同方向上舍入,这意味着刻度线最终会落在轴限制之外。 - Cris Luengo

2
您可以使用函数set手动设置刻度。
scatter(-0.5, 0.399, 'c','filled');
box on
axis([-0.504 -0.494 0.397 0.408 ])
legend('A')
xlabel('\gamma_0')
ylabel('\delta_0')
title('N=3')
yTickDiff = diff(get(gca,'YTick'));
set(gca,'YTick',[0.397:yTickDiff(1):0.408])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接