- 积分
- 35968
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-7-26
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 Aires 于 2012-10-20 11:29 编辑
感谢舍友XX松的提示,今天看了下imagesc这个函数,简单分享一下。具体查看help。
imagesc函数与pcolor函数差不多,都是可以直接填充颜色。而pcolor画出的图有网格线,需要shading interp or shading flat去掉。imagesc则不需要。
discription:
The imagesc function scales image data to the full range of the current colormap and displays the image.
syntax:
imagesc(C)
imagesc(x,y,C)
imagesc(...,clims)
imagesc('PropertyName',PropertyValue,...)
h = imagesc(...)
用法就是常规用法。它可以根据你的colormap,如jet的红色和蓝色对应变量场的最大和最小值。关键是imagesc运行速度很快,要比contour、contourf快上n多倍!如果是卫星数据比较大的话,分辨率较高,可以直接用imagesc,或者pcolor。
imagesc有些不同。
imagesc(x,y,C)
x和y通常可以设为矢量。但是如果x(1)>x(2),或者y(1)>y(2),会使图像左右或上下翻转,这点要注意。不同于我们平常设置的x,y,平常设置的x,y不会影响图像翻转的。除非你flipud或fliplr改变矩阵C。另外,imagesc函数把y轴默认设为从上到下最低到最高值,如从上到下是-90到90。可是我们不想这样做,因为纬度是下面-90,上面90.不能按照它默认的来做。所以我想可以这样,因为不管你y怎么设置,它都会这样标记,所以在一开始你可以把图弄成上下倒着的。然后用set(gca,'YDir','normal')可以同时倒转y轴坐标和图像上下翻转。
这应该是比较烦人的地方。转来转去的很乱。不过可以试一下的 。
如果x,y是一个数,即标量,表示图像从(x,y)这个左上角点开始画。
imagesc(...,clims)
clims可以设置为[ ],表示你的数据从哪到哪,即数据范围,同时它对应全部的colormap。可看doc imagesc的例子。
这让我昨天想起了个方法填充陆地。如果你下载高精度的海岸线,很可能它是不封闭的,那么就不能用patch。但是我们如果想填充它怎么办呢?我是这样想的。pcolor和imagesc差不多,都是把最大和最小值对应到colormap,那么如果你数据中有陆地等缺测,如-32767。这个值很小,是异常值。可以把colormap的颜色矩阵的第一个增加为[0 0 0],这里设置为黑色。那么再用你设置新的colormap的时候,图像应该会把-32767填充为黑色,其他正常值都比它高,应该会从蓝色到红色。这样就实现了海岸线不连接而填充了陆地。
画水色时我已用imagesc尝试了这个办法是有效的。把蓝色最下面的颜色矩阵增加为黑色。所有缺测值-32767都填充为黑色了。你也可以设置其他颜色填充缺测值,如灰色等。不过imagesc要注意上面所说的翻转,开始会感觉图形怎么也翻转不过来,原因就在于y轴的标度是默认的。翻转需要上面set的设置。
但是不知道为什么,用imagesc时我想改变gca的xticklabel和yticklabel时报错,不知道为什么,还请大家研究后留言告知我哈,我会在这个帖子中补充更多用法!
下面是用这个函数进行水色画图:
%全球叶绿素浓度分布图
clear all
load jet_and_black %增加最小值的颜色矩阵是灰色
chlor=hdfread('S19972441997273-L3m_MO_CHL_chlor_a_9km.hdf','l3m_data');
chlor(chlor==-32767)=NaN;
chlor=log10(chlor);
lon=linspace(-180,180,4320);
lat=linspace(90,-90,2160);
colormap(jet_and_black);
imagesc(lon,lat,chlor);
set(gca,'YDir','normal');
set(gca,'tickdir','out');
axis image
h=colorbar;
set(h,'ytick',[-2 -1 0 1 2]);
set(h,'yticklabel',[0.01 0.1 1 10 100]);
set(get(h,'ylabel'),'string','mg/m^3','fontsize',12)
xlabel('Longitude({\circ})','fontsize',12);ylabel('Latitude({\circ})','fontsize',12)
title('Global Concentration of Chlorophy|| a','fontsize',15)
print -dpng -r300 chlor.png
如果有好的方法,请在本帖中及时交流~@wlzhongouc
|
评分
-
查看全部评分
|