MATLAB和Octave中的Shading命令产生不同的结果

4
命令shading facetedshading interp在MATLAB和Octave中产生不同的图形。
考虑以下代码:
[X, Y] = meshgrid(0:2, 0:2);
Z = magic(3);

figure;
colormap('jet');

subplot(1, 3 ,1);
imagesc(Z);
axis xy
yticklabels({'0', '1', '2'})
yticks(1:3)
xticklabels({'0', '1', '2'})
xticks(1:3)
title('imagesc(Z)');

subplot(1,3,2);
surf(X, Y, Z);
shading faceted;
view([0,0,1]);
yticks(0:3)
xticks(0:3)
title('surf(X, Y, Z); shading faceted;');

subplot(1,3,3);
surf(X, Y, Z);
shading interp;
view([0,0,1]);
yticks(0:3)
xticks(0:3)
title('surf(X, Y, Z); shading interp;');

这是MATLAB的结果: 在此输入图片描述 而Octave生成的结果:

enter image description here

MATLAB生成了一个正确的图形。这个Octave图形有什么问题?
我们为什么会得到两个不同的输出?是与“view”命令有关的问题吗?
编辑(错误报告后):已经为Ocatve 6.1修复了此问题:https://hg.savannah.gnu.org/hgweb/octave/raw-file/11072ea6a16c/scripts/plot/appearance/view.m

3
请注意,Octave 中的最后两个图表具有反转的 y 轴。我怀疑这会产生很大的影响。也许 Octave 还以某种方式对输入进行了置换。 - Ander Biguri
3
根据@Ander的评论,Octave中的view([0, 0, -1])似乎与MATLAB版本相比产生了可比较的输出。 - HansHirse
@HansHirse view([0, 0, -1]) 不会产生相同的结果。 - sci9
@sci9 我再看了一遍,你是对的!根本不设置view就可以显示出可比较的图形,所以view问题可能需要另外解决...尽管如此,Ander的评论仍然是正确的。 - HansHirse
1
y 轴被反转了,还是 xy 轴被交换了?再看一下颜色排列。我加入了一个 xlabel('X axis') 的调用来澄清这个问题,在 Octave 中,似乎 X 轴最终出现在垂直轴上而不是水平轴上。 - Andrew Janke
我认为Matlab版本“正确”这一事实值得商榷。在Octave中,我得到了与上述不同的结果,这似乎更合理作为插值。尽管如此,在两个软件中都存在一些可疑之处。(在Octave 5.1.0和Matlab R2018b上进行测试)编辑:Octave插值 https://i.stack.imgur.com/io6lx.png - Tasos Papastylianou
1个回答

1
您的代码看起来没问题。我在macOS上使用Octave 4.4和5.2版本也可以复现。
可以添加xlabel('X Axis');来澄清正在发生的事情。
这似乎是Octave实现的view中的一个bug。似乎X轴和Y轴被交换了。请在Octave问题跟踪器https://savannah.gnu.org/bugs/?group=octave上报告此问题。

ylabel('Y 轴') 怎么办?我在图形上看不到这个调用的输出! - sci9
请查看错误编号#57800:https://savannah.gnu.org/bugs/index.php?57800 - sci9
1
已经在Octave 6.1中修复。 - sci9
1
太好了!总是很高兴当一些问题得到及时修复。感谢您的报告。 - Andrew Janke

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