使用MatLab绘制中国地图十分方便,我在前文中已经有相应阐述。实际应用中,我们常常需要将不同的区域以不同的颜色展示出来,这就是本文要阐述的内容。

本文使用MatLab将各省人口数据展示出来,人口越多颜色越黄,人口越少颜色越绿。最终结果如下图所示(点击看大图)。

绘制过程如下:

%-- 分省中国地图在MATLAB中的画法 --%
% Author: gaospecial@gmail.com
% Date: 2012-6-5 14:04:01
% 地图数据来源:国家基础地理信息系统网站
% 人口数据来源:国家统计年鉴2011版

载入地图数据

载入各省的多边形数据

sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true); % 省
% 检查数据发现中午名称为乱码,可能是由于字符编码引起的,需要纠正文件导入时出现的乱码
% 中文名称记录在相应的dbf文件中,可以使用Excel打开,并且不会出现乱码,截取其中的中文保存为文本文件
% 然后在导入工作区,并将其保存为*.mat格式文件,随用随取。
% 依次替换sheng数据中的乱码【算是变通之法,有谁知道更好的方法一定告诉我哦】
load chinese_name.mat% 省,省会,主要城市的正确中文
for i=1:length(sheng)
    sheng(i).NAME=sheng_chinese_name{i}; % 纠正中文显示错误
end
unique(sheng_chinese_name) % 含有34个省(直辖市)的数据
length(sheng) % 共分为925个区块
ans = 

    '上海市'
    '云南省'
    '内蒙古自治区'
    '北京市'
    '台湾省'
    '吉林省'
    '四川省'
    '天津市'
    '宁夏回族自治区'
    '安徽省'
    '山东省'
    '山西省'
    '广东省'
    '广西壮族自治区'
    '新疆维吾尔自治区'
    '江苏省'
    '江西省'
    '河北省'
    '河南省'
    '浙江省'
    '海南省'
    '湖北省'
    '湖南省'
    '甘肃省'
    '福建省'
    '空'
    '西藏自治区'
    '贵州省'
    '辽宁省'
    '重庆市'
    '陕西省'
    '青海省'
    '香港特别行政区'
    '黑龙江省'

ans =

   925

导入2011年各省人口数据

使用importdata向导导入2011年全国31个省的人口数据:data为人口数目 textdata为省名称

d=importdata('renkou.txt');
data=d.data; % 人口数目
textdata=d.textdata; % 相对应的省的名称

定义地图参数

针对不同省份,分别设置不同的颜色(FaceColor) 定义颜色

k=128;
mycolormap=summer(k);
% 生成不同区域按大小的颜色,按照人口数目多少分别指定不同的颜色
% 人口越多,颜色越突出
geoname={sheng.NAME}';
max_data = max(data);
n=length(data);
mysymbolspec=cell(1,n);% 预定义变量可以加快处理速度
for i=1:n
    count=data(i);
    mycoloridx=floor( k * count / max_data );
    mycoloridx(mycoloridx<1)=1;
    myprovince=textdata{i};
    geoidx=strmatch(myprovince, geoname);
    if numel(geoidx) > 0
        province_name=geoname( geoidx(1) );
        mysymbolspec{i} = {'NAME', char(province_name), 'FaceColor', mycolormap( mycoloridx, :) };
    end
end

显示地图

figure
ax=worldmap('china'); % 使用worldmap的坐标轴作图
setm(ax,'grid','off') % 关闭grid
setm(ax,'frame','off') % 关闭边框
setm(ax,'parallellabel','off') % 关闭坐标轴标记
setm(ax,'meridianlabel','off') % 关闭坐标轴标记

% 最关键的两个语句
symbols=makesymbolspec('Polygon',{'default','FaceColor',[0.9 0.9 0.8],...
    'LineStyle,'--','LineWidth',0.2,...
    'EdgeColor',[0.8 0.9 0.9]},...
    mysymbolspec{:}...
    );
geoshow(sheng,'SymbolSpec',symbols); % 此处用mapshow投影会不正确

图的标注

% 在图像右侧显示bar
colormap(summer(k))
hcb=colorbar('EastOutside');
step=round(max_data/11);
set(hcb,'YTick',(0:.1:1))
set(hcb,'YTickLabel',num2cell(0:step:max_data))

% 给图像加标题
title('中国2011年各省人口数(万人)')

下载本文附件,包括M文件和输出结果(附件已更新2012-6-14)。
china_map

作者简介

Chun-Hui Gao is a Research Associate at Huazhong Agricultural University.

重复使用

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The source code is licensed under MIT. The full source is available at https://github.com/yihui/hugo-prose.

欢迎修订

如果您发现本文里含有任何错误(包括错别字和标点符号),欢迎在本站的 GitHub 项目里提交修订意见。

引用本文

如果您使用了本文的内容,请按照以下方式引用:

gaoch (2012). MatLab中国地图进阶:以不同的颜色表示各省数据的差异. BIO-SPRING. /post/2012/06/05/2012-06-05-matlab-chinamap-coloring/

BibTeX citation

@misc{
  title = "MatLab中国地图进阶:以不同的颜色表示各省数据的差异",
  author = "gaoch",
  year = "2012",
  journal = "BIO-SPRING",
  note = "/post/2012/06/05/2012-06-05-matlab-chinamap-coloring/"
}