在下面的示例中,每种情况都有一些明显的代码差异,但我不明白它们将如何改变图像或绘图的方向,如每种情况所示。
原始图像的大小为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 180],[ - 90 90],worldMap);
使用此代码:
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');
在这种情况下,地图垂直翻转,轮廓绘制正确。
通过matlab的Matlab文档,它说:
imagesc(x,y,C)将C显示为图像并指定其边界 带有向量x和y的x轴和y轴。 如果x(1)> x(2)或y(1)> y(2),. 图像分别左右或上下翻转。如果x和y是 标量,图像被转换为指定的位置(x,y)等 图像的左上角从(x,y)开始。
我强调了可能与翻转图像有关的内容,但似乎在这里似乎都不是这样,并且不能解释在一种情况下翻转的不一致性而不是另一种情况。
答案 0 :(得分:2)
解释是,imagesc
命令(如image
)将'Ydir'
轴属性设置为'reverse'
。
使用
C
或X
,Y
,C
,image
设置轴限制以紧密包围图像时,设置轴YDir
属性为'reverse'
,并将轴View
属性设置为[0 90]
。
这意味着垂直轴值从轴顶部到底部增加。
现在你可以比较两种情况:
如果您单独运行contourf
命令,则表示正常"正常"轴模式,垂直轴值从轴的底部到顶部增加。第一个图中的垂直轴标记反映了这一点。
如果您使用imagesc
绘制图像并在同一图上运行contour
,则垂直轴首先翻转imagesc
。随后的contour
命令在翻转的垂直轴上运行,并相应地绘制。这就是轮廓线相对于情况1垂直翻转的原因。
请注意,案例2中获得的组合数字是正确的。如果你"视觉上"结合你问题的前两个图像(这些图像是从独立调用imagesc
和countour
获得的),这是错误的,因为它们有不同的垂直轴。
答案 1 :(得分:0)
这不是旋转问题,而是垂直翻转的问题。
如果仔细观察前两个图,你会看到垂直刻度被翻转,所以如果你直接组合你的两个图(无论如何),你最终会得到你所观察到的, ie 一张相对于另一张图翻转的图。
我建议在叠加之前翻转轮廓图:
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');
或
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');
最佳,