我想在Matlab R2014a中保存一个图形,我想在图像上绘制数据。这是代码:
[Singapore, R] = geotiffread(file);
s = size(Singapore);
matrix = rand(s(1),s(2));
geoshow(Singapore(:,:,1:3), R)
hold on
geoshow(matrix, R, 'DisplayType', 'texturemap','facealpha',.2);
xlim([103.605,104.04])
ylim([1.2,1.475])
当我打印图时
print(gcf, '-dpng', fullfile(FileF, 'test.png'))
答案 0 :(得分:1)
非常感谢图片链接! 我已经尝试过你的代码(适用于你提供的`Singapore.tif'文件和一个合适的输出文件),它在我的系统上运行正常(Matlab 2013b,Linux 64位)。这是输出文件:
所以我很遗憾地说您的代码没有任何问题,这可能与Windows上的'png'驱动程序或您的特定安装有关。您是否尝试过打印到其他驱动程序? (例如jpg或pdf?)。如果你从图的图形菜单中执行此操作,它实际上是否有效,即File->Save As
;或通过具有适当属性的File->Export Setup->Export
?
来查看是否将新加坡图像转换为双重解决方法
geoshow(Singapore(:,:,1:3), R)
到
geoshow(mat2gray(Singapore(:,:,1:3)), R)
<小时/> 可能还值得尝试手动绘制数据 并查看打印是否有效,例如:
[Singapore, R] = geotiffread('Singapore.tif');
SingaporeXYImage = cat(3, flipud(Singapore(:,:,1)), ...
flipud(Singapore(:,:,2)), ...
flipud(Singapore(:,:,3)));
s = size(Singapore);
matrix3D = repmat( rand(s(1),s(2)), [1,1,3]);
imagesc(R.LongitudeLimits, R.LatitudeLimits, mat2gray(SingaporeXYImage));
hold on;
imagesc(R.LongitudeLimits, R.LatitudeLimits, matrix3D, 'alphadata', .2);
hold off;
axis xy equal tight;
xlim([103.605,104.04])
ylim([1.2,1.475])
print(gcf, '-dpng', 'test.png');
<小时/> 作为奖励,这里是你如何在Octave中执行同样的事情,如果你感兴趣的话(我发现Octave的印刷图看起来更好,特别是在字体方面!):
pkg load mapping;
pkg load image;
[SingaporeStruct, R] = rasterread('Singapore.tif');
SingaporeImage = cat(3, SingaporeStruct(1:3).data); % note this is a matrix of
% "doubles" in range [0,255]
SingaporeImage = mat2gray(SingaporeImage); % Convert to appropriate [0,1] range
% for "doubles" rgb images!
s = size (SingaporeImage);
matrix3D = repmat (rand (s(1), s(2)), [1, 1, 3]);
imagesc (R.bbox(:,1), R.bbox(:,2), ...
SingaporeImage .* 0.8 + matrix3D .* 0.2); % manually create
% transparency effect
axis xy equal tight
xlim([103.605,104.04])
ylim([1.2,1.475])
print (gcf, '-dpng', 'test.png');
<小时/>
此外,不要不尊重我的同事以及他/她在答案中所付出的努力,但我会注意到,您收到的其他答案基本上是完全错误的,您应该撤回marked accepted
,而不管他/她的申请是什么并警告有关收回明显答案的粗鲁程度。 mapshow
专门用于使用MapCellsReference
格式的图片:boston.tif
图片就是这样一张图片。 您的图片使用GeographicCellsReference
格式。 mapshow
用于前者,geoshow
用于后者; geoshow
的{{1}}失败,boston.tif
mapshow
失败的方式与Singapore.tif
相同。显而易见,您的图像是“Geo”变体,因为您的行geoshow(Singapore(:,:,1:3), R)
在没有抛出错误的情况下工作。因此,使用mapshow
的建议不是您问题的正确答案,并且具有误导性。更不用说它与你的实际问题完全无关,因为print
命令不能从它的数字句柄产生预期的结果,理论上它应该与数字的生成方式无关。我毫不犹豫地从中撤回你的“接受”标记。尤其是因为该网站可以作为许多其他观众的参考;仅仅因为你被欺负接受它而引导用户找错了答案是没有意义的。
答案 1 :(得分:0)