MATLAB:使用自定义颜色图绘制栅格图

标签 matlab colors geospatial raster

在 MATLAB 中,我有一个与引用对象 R 关联的矩阵 map_data(均在 this MAT-file 中)。我想用一个离散的颜色条来映射它,给定一个不规则的值范围,看起来像这样:

enter image description here

我想使用 geoshow() 或类似的东西,让我可以随意重新投影并将 shapefile 叠加在栅格上。但实际上任何能让我走上正轨的东西都会非常感激。

我正在使用 MATLAB r2014b。以下是颜色图的相关信息:

                                R    G    B
0     <= map_data < 0.001     204  204  204
0.001 <= map_data < 0.005     153  153  153
0.005 <= map_data < 0.01      255  255  178
0.01  <= map_data < 0.05      254  204   92
0.05  <= map_data < 0.1       253  141   60
0.1   <= map_data < 0.25      240   59   32
0.25  <= map_data < 0.5       189    0   38
0.5   <= map_data < 1           0    0    0

在 MATLAB 答案中交叉发布。

最佳答案

MATLAB 仅内置支持线性颜色图。因此,对于像这样的非线性映射,您需要转换 map_data 的值,以便颜色的变化均匀分布。对于像这样的离散颜色图,整数索引是理想的,您可以使用 histc 轻松获得它们:

ranges = [0 0.001 0.005 0.01 0.05 0.1 0.25 0.5 1];
[~,ind] = histc(map_data,ranges);

使用 ind 中的索引代替 map_data 中的值作为您的颜色数据,然后您只需将指定的颜色应用为颜色图。如果您需要在颜色栏上标记真实的 map_data 值,请手动重新标记相应颜色栏的 YTickLabel

我没有映射工具箱来用 geoshow 来演示这一点,但显示为一个简单的图像的工作方式如下:

image(ind)
axis equal tight
set(gca,'YDir','normal')
colormap([204  204  204
          153  153  153
          255  255  178
          254  204   92
          253  141   60
          240   59   32
          189    0   38
          0    0    0]/255);
h = colorbar;
h.YTickLabel = edges(h.YTick)*100;

结果如下:

map_data with discrete colormap

关于MATLAB:使用自定义颜色图绘制栅格图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727526/

相关文章:

c++ - OpenCV vs MATLAB(图像处理的形状测量功能)

vba - 如何在Excel VBA中将纯色应用于数据栏?

java - 如何插值四种颜色?

java - 为什么我的组合框无法正确更新其颜色?

matlab - 尝试在 MATLAB 中编写一个函数来播放给定音符(频率)和长度向量的歌曲

matlab - MATLAB : Getting error message while using try/catch

matlab - 如何强调球面上的某些区域

javascript - 从 featureCollection turf.js 中删除功能

php - 在 PHP 中转换 MySQL 二进制 GEOMETRY 字段

python - Mac 中 Django 的 GDAL 配置 GDAL_LIBRARY_PATH 异常