Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有意外翻转的Matlab图像和绘图_Matlab_Matlab Figure - Fatal编程技术网

具有意外翻转的Matlab图像和绘图

具有意外翻转的Matlab图像和绘图,matlab,matlab-figure,Matlab,Matlab Figure,在下面的示例中,每种情况下都有一些明显的代码差异,但我不明白它们如何改变图像或绘图的方向,如每种情况所示 原始图像的大小为407 x 813 x 3 对于等高线中的数据,X范围为-180到+175,Y范围为-85到+85 对于图像,我尝试拟合它,使X的范围从-180到+180,Y的范围从-90到+90。因此,图像覆盖的地理范围比图像覆盖的范围稍宽 我有一些地理数据的等高线图。它的情节是这样的,我希望它看起来: 绘制此外观的代码如下所示 figure (1); contour(X, Y, dec

在下面的示例中,每种情况下都有一些明显的代码差异,但我不明白它们如何改变图像或绘图的方向,如每种情况所示

原始图像的大小为407 x 813 x 3

对于等高线中的数据,X范围为-180到+175,Y范围为-85到+85

对于图像,我尝试拟合它,使X的范围从-180到+180,Y的范围从-90到+90。因此,图像覆盖的地理范围比图像覆盖的范围稍宽

我有一些地理数据的等高线图。它的情节是这样的,我希望它看起来:

绘制此外观的代码如下所示

figure (1);
contour(X, Y, dec0Mat,contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');   
我可以自己绘制图像,看起来还可以:

使用此代码: 图(99) imagesc([-180],-90],世界地图)

但当我尝试将两者结合起来时,我得到了以下结论:

使用此代码:

figure (1);
image([-180 180], [-90 90], worldMap);
hold on
title('Declination at elev = 0 km');
contour(X, Y, dec0Mat,contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');
在这种情况下,地图看起来是正确的,但等高线是垂直翻转的

在另一种情况下,我得到:

使用此代码:

figure (3);
hold on
title('Declination at elev = 30 km');
imagesc([-180 180], [-90 90], worldMap);
contour(X, Y, dec30Mat,contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');
在这种情况下,地图垂直翻转,等高线向右绘制

根据imagesc的Matlab文档,它说:

imagesc(x,y,C)将C显示为图像,并指定图像的边界 具有向量x和y的x轴和y轴如果x(1)>x(2)或y(1)>y(2),则 图像分别左右或上下翻转。如果x和y为 标量,图像被转换到指定的位置(x,y),例如 图像的左上角从(x,y)开始


我强调了可能与正在翻转的图像相关的内容,但这两种情况似乎都不是,也无法解释在一种情况下翻转图像与在另一种情况下翻转图像的不一致性。

这不完全是旋转问题,更重要的是垂直翻转问题

如果仔细观察前两个图,您将看到垂直比例是翻转的,因此如果您直接组合两个图(无论以何种方式),您将得到您观察到的结果,即一个图相对于另一个图翻转

我建议在叠加之前翻转等高线图:

hold on
image([-180 180], [-90 90], worldMap);
title('Declination at elev = 0 km');
contour(X, Y, flipud(dec0Mat), contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');


最好的解释是
imagesc
命令将
'Ydir'
轴属性设置为
'reverse'

当使用
C
X
Y
C
调用时,
image
设置轴限制以紧密包围图像,将轴
YDir
属性设置为
'reverse',并将轴
视图
属性设置为
[0 90]

这意味着垂直轴的值从轴的顶部增加到底部

现在您可以比较这两种情况:

  • 如果单独运行
    contourf
    命令,则会出现“正常”轴模式,垂直轴值从轴的底部向顶部增加。第一个图形中的垂直轴标签反映了这一点

  • 如果使用
    imagesc
    打印图像,并在同一图形上运行
    contour
    ,则垂直轴首先被
    imagesc
    翻转。随后的
    轮廓
    命令在翻转的垂直轴上操作,并相应地进行打印。这就是为什么等高线相对于案例1垂直翻转的原因


  • 请注意,在案例2中获得的组合图是正确的。如果你将问题的前两张图片(分别从调用
    imagesc
    countour
    获得)进行“视觉”组合,那就错了,因为它们有不同的垂直轴。

    我仍然不明白为什么看起来不一致。绘制等高线的代码行在所有情况下都是相同的,并且在所有情况下都提供了X和Y矢量。图像也是如此。我不明白为什么其中一个会在一种情况下翻转,而在另一种情况下不会翻转。(我换了主题。我必须仔细查看数据,然后才发现它只是一个翻转。)顺便说一句,在我添加图像之前,轮廓看起来都很好。对我来说,绘图代码中没有问题,问题是以前(例如,如何生成
    dec0mat
    )。如果你只看你展示的地图,它从80到-80,而等高线图从-80到80。你根本不可能希望把它们叠加在一起得到想要的输出。
    imagesc
    的翻转问题确实存在,但与您的问题无关。不,我的问题是翻转问题。只要我提供X和Y边界,我应该能够用不同的边界叠加两个图。轮廓正好覆盖了它相对于图像应该覆盖的X和Y范围。但这是我的问题。如果不先绘制图像,轮廓不会翻转。如果我先打印图像,则打印会翻转。不,对不起,您的想法不正确。这就是你的错误。请花些时间来阅读和理解我写的东西,我不能为你做更多的事情。现在这是有意义的。我不明白为什么图像坐标的文档都显示0,0在左上方。单独绘制图像时,在0,0附近操纵图像值始终会影响左上角。看起来正确的做法是将轴YDir设置为“正常”(这是预期的绘图坐标)。我会在绘制图像阵列之前翻转它,并将YDir设置为“正常”。现在我了解到这是一个轴反转问题,我可以在我的Y轴编号中看到这一点。使用“保持”冻结轴,如示例中所示。
    hold on
    image([-180 180], [-90 90], worldMap);
    title('Declination at elev = 0 km');
    contour(X, -Y, dec0Mat, contoursAt, 'ShowText','on', 'LineWidth', 2);
    colormap('Gray');