楼主: 耕耘使者
13664 33

[作图问题求助] 请教既有颜色又有省名的中国地图做法 [推广有奖]

贵宾

已卖:5006份资源

学术权威

39%

还不是VIP/贵宾

-

威望
4
论坛币
1811021 个
通用积分
171.7911
学术水平
109 点
热心指数
173 点
信用等级
87 点
经验
93428 点
帖子
4549
精华
0
在线时间
2848 小时
注册时间
2006-4-6
最后登录
2025-7-12

楼主
耕耘使者 发表于 2012-5-1 19:05:17 |AI写论文
500论坛币
图形如下:
TT截图未命名.bmp
图形原出处,下贴9楼:
https://bbs.pinggu.org/thread-1410066-1-1.html
数据出处:上贴8楼和16楼
方法不限于R,什么软件都可以教我。谢谢!

最佳答案

大公子 查看完整内容

#你以前的代码:https://bbs.pinggu.org/thread-1412880-1-1.html,如下: library(maptools) axx
关键词:中国地图 中国地 thread pinggu Ping 中国地图 颜色
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ltx5151 + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

沙发
大公子 发表于 2012-5-1 19:05:18
#你以前的代码:https://bbs.pinggu.org/thread-1412880-1-1.html,如下:
library(maptools)
axx<-readShapePoly("bou2_4p.shp", proj4string=CRS("+proj=longlat +ellps=clrk66"))
x=axx
#plot(x,col=gray(924:0/924));#using col instead of fg!

getColor=function(mapdata,provname,provcol,othercol)
{
f=function(x,y) ifelse(x %in% y,which(y==x),0);
colIndex=sapply(mapdata$NAME,f,provname);
col=c(othercol,provcol)[colIndex+1];
return(col);
}

provname=c("北京市","天津市","河北省","山西省","内蒙古自治区",
  "辽宁省","吉林省","黑龙江省","上海市","江苏省",
  "浙江省","安徽省","福建省","江西省","山东省",
  "河南省","湖北省","湖南省","广东省",
  "广西壮族自治区","海南省","重庆市","四川省","贵州省",
  "云南省","西藏自治区","陕西省","甘肃省","青海省",
  "宁夏回族自治区","新疆维吾尔自治区");
pop=c(110.56,112.51,113.43,112.52,108.45,112.83,111.23,109.71,110.64,116.51,
  113.86,127.85,117.93,114.74,112.17,118.46,128.18,126.16,130.30,
  125.55,135.64,115.13,116.01,107.03,108.71,102.73,122.10,114.82,
  110.35,108.79,106.12);
pop=pop-min(pop);
provcol=rgb(red=1-pop/max(pop)/1,green=1-pop/max(pop)/1,blue=1/1.5);
plot(x,col=getColor(x,provname,provcol,"white"),border = "green",xlab="",ylab="")


#在此基础上追加以下两行代码:
dat = read.csv(textConnection("省份,jd,wd
    北京,116.4666667,39.9
    上海,121.4833333,31.23333333
    天津,117.1833333,39.15
    重庆,106.5333333,29.53333333
    黑龙江,126.6833333,45.75
    吉林,125.3166667,43.86666667
    辽宁,123.4,41.83333333
    内蒙,111.8,40.81666667
    河北,114.4666667,38.03333333
    山西,112.5666667,37.86666667
    山东,117,36.63333333
    河南,113.7,34.8
    陕西,108.9,34.26666667
    甘肃,103.8166667,36.05
    宁夏,106.2666667,38.33333333
    青海,101.75,36.63333333
    新疆,87.6,43.8
    安徽,117.3,31.85
    江苏,118.8333333,32.03333333
    浙江,120.15,30.23333333
    湖南,113,28.18333333
    江西,115.8666667,28.68333333
    湖北,114.35,30.61666667
    四川,104.0833333,30.65
    贵州,106.7,26.58333333
    福建,119.3,26.08333333
    台湾,121.5166667,25.05
    广东,113.25,23.13333333
    海南,110.3333333,20.03333333
    广西,108.3333333,22.8
    云南,102.6833333,25
    西藏,91.16666667,29.66666667
    香港,114.1666667,22.3
    澳门,113.5,22.2"))

text(dat$jd, dat$wd, dat[, 1], cex = 0.7)
#参考:http://yihui.name/cn/2008/10/china-map-and-city-locations-with-r/

另外,上面这段坐标是省会的位置,怎么来的我不清楚。
不过用locator()来定位你想要的位置,同样也能生成标签坐标。比如你想要北京的坐标,用locator(1),然后在已生成的图形上左键点击北京的位置,将返回该点坐标。
又比如"青海"有点偏右,就用locator(1)再重选下你想要它所在的位置,修改上面提供的坐标即可。

已有 2 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 1 + 1 + 1 热心帮助其他会员
ywh19860616 + 1 + 1 + 1 热心

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

藤椅
ywh19860616 发表于 2012-5-1 22:00:11
耕耘使者兄,你应该安装了gis吧,这个在gis中实现不难。
你导入shp格式的图层后,在左边会出现Layers,就是有个方框处显示你的图形名称的。你点到那里,选择右键,选择Label Features,就可以显示了。


我觉得这个在R基础上实现应该也不难,期待他们的回答。
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 1 + 1 热心帮助其他会员
epoh + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

一份耕耘,一份收获。

板凳
耕耘使者 发表于 2012-5-2 07:11:25
ywh19860616 发表于 2012-5-1 22:00
耕耘使者兄,你应该安装了gis吧,这个在gis中实现不难。
你导入shp格式的图层后,在左边会出现Layers,就是 ...
我装了Arcgis10,也打开了shp文件,见下图:
TT截图未命名.bmp
下来呢?怎样做XINGBIEBI的图形呢?而且,
左边没有图层,可能在一次意外操作时将其删除了,怎样才能再将其调出来?

报纸
ywh19860616 发表于 2012-5-2 07:50:34
耕耘使者 发表于 2012-5-2 07:11
我装了Arcgis10,也打开了shp文件,见下图:

下来呢?怎样做XINGBIEBI的图形呢?而且,
在工具栏的  窗口或者自定义   里面应该可以把左边的窗口调出来,试试看。
就是设置为默认形式。
一份耕耘,一份收获。

地板
耕耘使者 发表于 2012-5-2 13:54:50
ywh19860616 发表于 2012-5-2 07:50
在工具栏的  窗口或者自定义   里面应该可以把左边的窗口调出来,试试看。
就是设置为默认形式。
在菜单栏的窗口中调出了层,如下图:
TT截图未命名.bmp
也点了右键,如下图:
图片1.jpg
没有找到您所说的“label features"啊?莫非是最后一个”属性“?打开以后如下图:
TT截图未命名2.bmp
然后呢?
而且,按常理,应该是先做出没有省名的图,再如您所说的加上标签吧,可我只做出了底图,如3楼(藤椅)所示!其中的我想要做图的XINGBIEBI到底怎样绘制啊?  您能否也像我一样上传一下截图?那样我一次就学会了,而不会像现在这样反复地打扰您!

7
ywh19860616 发表于 2012-5-2 14:39:28
噢,你的软件是中文版本的,默认的标注应该就是name,所以你点击下右键出来的   标注要素(L) 就可以得到那效果了。

一份耕耘,一份收获。

8
lutian08 发表于 2012-5-2 19:10:04
很简单的,以前的语句加最后一条就行了:
library(rgdal)
library(classInt)
province<-readOGR("D:/else","province2")
xyz=read.csv("D:/else/xyz.csv")
province$xyz<-xyz[["xyx"]]
pal<-c("green","blue","orange","pink","red")
q5<-classIntervals(province$xyz,n=5,style="quantile")
q5Colours<-findColours(q5,pal)
plot(province,col=q5Colours)
legend("topleft",fill=attr(q5Colours,"palette"),legend=names(attr(q5Colours,"table")),bty="n")

invisible(text(getSpPPolygonsLabptSlots(province), labels=as.character(province$NAME), cex=0.8))
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

9
lutian08 发表于 2012-5-2 19:14:49
ArcGis软件要系统地学的,一时别人不好教,我是2006年花好象是7千多学的初级班和中级班,学的内容也不多,最近几年自学了不少gis软件和空间统计方面的内容,还跟中科院地理所空间分析方面的老师学了些
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

10
耕耘使者 发表于 2012-5-2 21:02:11
ywh19860616 发表于 2012-5-2 14:39
噢,你的软件是中文版本的,默认的标注应该就是name,所以你点击下右键出来的   标注要素(L) 就可以得到那效 ...
??
一声叹息

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-4 01:19