楼主: 耕耘使者
13643 33

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

21
lutian08 发表于 2012-5-3 20:42:40
dxystata 发表于 2012-5-3 20:14
> center
            [,1]    [,2]
[1,]  1623937.8 5866667
这个和地图province对象中的dataframe对应的

22
天狮 发表于 2012-5-3 23:53:05
统计之都论坛上有

23
屋檐滴语 发表于 2012-5-4 01:53:26
> library(rgdal)
载入需要的程辑包:sp
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 1.9.0, released 2011/12/29
Path to GDAL shared files: D:/Program Files/R/R-2.15.0/library/rgdal/gdal
Loaded PROJ.4 runtime: Rel. 4.7.1, 23 September 2009, [PJ_VERSION: 470]
Path to PROJ.4 shared files: D:/Program Files/R/R-2.15.0/library/rgdal/proj
> library(classInt)
载入需要的程辑包:class
载入需要的程辑包:e1071
> province<-readOGR("e:/else","province2")
错误于ogrInfo(dsn = dsn, layer = layer, input_field_name_encoding = input_field_name_encoding) :
  Cannot open file
> xyz=read.csv("D:/else/xyz.csv")
错误于file(file, "rt") : 无法打开链结
此外: 警告信息:
In file(file, "rt") :
  无法打开文件'D:/else/xyz.csv': No such file or directory
> province$xyz<-xyz[["xyx"]]
错误: 找不到对象'xyz'
> pal<-c("green","blue","orange","pink","red")
> q5<-classIntervals(province$xyz,n=5,style="quantile")
错误于is.factor(var) : 找不到对象'province'
> q5Colours<-findColours(q5,pal)
错误于findColours(q5, pal) : 找不到对象'q5'
> plot(province,col=q5Colours)
错误于plot(province, col = q5Colours) :
  在为'plot'函数选择方法时评估'x'参数出了错: 错误: 找不到对象'province'

> legend("topleft",fill=attr(q5Colours,"palette"),legend=names(attr
+ (q5Colours,"table")),bty="n")
错误于as.graphicsAnnot(legend) : 找不到对象'q5Colours'
>
> invisible(text(getSpPPolygonsLabptSlots(province), labels=as.character(province$NAME),
+ cex=0.8))
错误于slot(SpP, "polygons") : 找不到对象'province'
此外: 警告信息:
use coordinates method

24
屋檐滴语 发表于 2012-5-4 01:54:10
纠结了一天了,还是没有能解决,先睡觉了,真的困了。

25
屋檐滴语 发表于 2012-5-5 14:42:53
library(maptools);
x=readShapePoly('bou2_4p.shp')
plot(x);
plot(x,col=gray(924:0/924));
getColor=function(mapdata,provname,provcol,othercol)
{
        f=function(x,y) ifelse(x %in% y,which(y==x),0);
        colIndex=sapply(mapdata@data$NAME,f,provname);
        col=c(othercol,provcol)[colIndex+1];
        return(col);
}
provname=c("北京市","天津市","河北省","山西省","内蒙古自治区",
                "辽宁省","吉林省","黑龙江省","上海市","江苏省",
                "浙江省","安徽省","福建省","江西省","山东省",
                "河南省","湖北省","湖南省","广东省",
                "广西壮族自治区","海南省","重庆市","四川省","贵州省",
                "云南省","西藏自治区","陕西省","甘肃省","青海省",
                "宁夏回族自治区","新疆维吾尔自治区","台湾省",
                "香港特别行政区");

provcol=c("red","green","yellow","green","red","green","yellow","blue","red","green","yellow","blue","red","green","yellow","purple","red","green","yellow","purple","red","green","yellow","blue","red","green","yellow","purple","red","green","yellow","purple","blue","green","yellow","purple","green");
plot(x,col=getColor(x,provname,provcol,"white"),border = "green",xlab="",ylab="")

legend("topleft", legend = provname, bty = "n", col = provcol, pch = 15,ncol = 1, cex = 0.7, lwd = 1)

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)
# 一个晚上的辛苦成果。

26
屋檐滴语 发表于 2012-5-5 14:46:12
中国地图

27
屋檐滴语 发表于 2012-5-5 14:51:11
貌似地图数据有误,或者是精度和纬度有误,总之还没有达到我想要的效果。上图缺有两个明显的地方:1、精度和维度数据和地图数据貌似不是那么和谐的相处,不知道是谁的问题。2、颜色方面有待改进,我现在急需知道如何给每一个省赋予一个一个具体的RGB值达到对颜色的随心所欲。

28
耕耘使者 发表于 2012-7-20 17:11:58
lutian08 发表于 2012-5-2 19:10
很简单的,以前的语句加最后一条就行了:
library(rgdal)
library(classInt)
出来了乱码,哪儿的问题呢?
代码:
library(rgdal)
library(classInt)
county<-readOGR("E:/statsoft/GEOda/county(new)","county")
rjgdp=read.csv("E:/statsoft/GEOda/rjgdp.csv")
county$rjgdp<-rjgdp[["rjgdp"]]
county_bd<-county[county$USED_CODE>=13062100&county$USED_CODE<=13068400,]
pal<-c("green","blue","red")
q5<-classIntervals(county_bd$rjgdp,n=4,style="fixed",fixedBreaks=c(7000,11000, 15000, 20000, 26000))
q5Colours<-findColours(q5,pal)
plot(county_bd,col=q5Colours)
legend("topleft",fill=attr(q5Colours,"palette"),legend=names(attr(q5Colours,"table")),bty="n")
invisible(text(getSpPPolygonsLabptSlots(county_bd), labels=as.character(county_bd$NAME), cex=0.8))


TT截图未命名.bmp

29
耕耘使者 发表于 2012-7-20 17:20:52
耕耘使者 发表于 2012-7-20 17:11
出来了乱码,哪儿的问题呢?
代码:
library(rgdal)
英文名字没问题:
library(rgdal)
library(classInt)
county<-readOGR("E:/statsoft/GEOda/county(new)","county")
rjgdp=read.csv("E:/statsoft/GEOda/rjgdp.csv")
county$rjgdp<-rjgdp[["rjgdp"]]
county_bd<-county[county$USED_CODE>=13062100&county$USED_CODE<=13068400,]
pal<-c("green","blue","red")
q5<-classIntervals(county_bd$rjgdp,n=4,style="fixed",fixedBreaks=c(7000,11000, 15000, 20000, 26000))
q5Colours<-findColours(q5,pal)
plot(county_bd,col=q5Colours)
legend("topleft",fill=attr(q5Colours,"palette"),legend=names(attr(q5Colours,"table")),bty="n")
invisible(text(getSpPPolygonsLabptSlots(county_bd), labels=as.character(county_bd$PYNAME), cex=0.8))

TT截图未命名.bmp
多谢lutian朋友!

30
lutian08 发表于 2012-7-20 23:28:16
county_bd$NAME,不是小写name?

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-22 15:21