全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
7799 7
2013-06-28
想用R语言中maptools工具包将中国31省市分类着色,各个省市数值不同,已经分成了三类,第一类用红色,第二类用绿色,第三类用其他颜色,采用条件语句,但是总是出现错误,现将程序粘贴与此,请各位帮忙,谢谢!
程序:
provname=c("北京市","天津市","河北省","山西省","内蒙古自治区","辽宁省","吉林省","黑龙江省","上海市","江苏省","浙江省","安徽省","福建省","江西省","山东省","河南省","湖北省","湖南省","广东省","广西壮族自治区","海南省","重庆市","四川省","贵州省","云南省","西藏自治区","陕西省","甘肃省","青海省","宁夏回族自治区","新疆维吾尔自治区");
pop=c(0.703588,0.837046,1.069312,1.0652,1.08709,0.92414,0.858264,0.876926,1.261306,1.27877,1.227256,1.020232,0.910269,0.95867,1.219773,0.959841,1.113117,1.07381,1.431527,0.872383,0.773907,0.864137,1.289779,1.118233,0.975587,0.643821,1.05085,0.928015,0.717806,0.817642,1.071703);
if(pop>1.22)
{provcol=rgb(red=1-pop/max(pop)/2,green=0,blue=0)}
else if(pop<0.83)
{provcol=rgb(red=0,green=1-pop/max(pop)/2,blue=0)}
else
{provcol=rgb(red=1-pop/max(pop)/2,green=1-pop/max(pop)/2,blue=0)}
plot(x,col=getColor(x,provname,provcol,"white"),xlab="",ylab="");

出现的错误信息:
警告信息:
In if (pop > 1.22) { : 条件的长度大于一,因此只能用其第一元素
> else if(pop<0.83)
错误: 意外的'else' in "else"
> {provcol=rgb(red=0,green=1-pop/max(pop)/2,blue=0)}
> else
错误: 意外的'else' in "else"


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-6-28 11:33:58
如果要用if做判断,那么你的例子中要用到for来遍历每一个元素,然后在另一个数组的对应位置元素赋值。

否则,你应该使用下标的条件运算provcol[pop>1.2] <- exp这样的形式。

记住,r的变量是个数组,不是一个值,这点和c不一样
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-28 15:28:48
咕舟蓑笠 发表于 2013-6-28 11:33
如果要用if做判断,那么你的例子中要用到for来遍历每一个元素,然后在另一个数组的对应位置元素赋值。

否 ...
因为初学所以不懂这些,请问具体如何改进?谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-28 17:50:55
if(pop>1.22)
{provcol=rgb(red=1-pop/max(pop)/2,green=0,blue=0)}
else if(pop<0.83)
{provcol=rgb(red=0,green=1-pop/max(pop)/2,blue=0)}
else
{provcol=rgb(red=1-pop/max(pop)/2,green=1-pop/max(pop)/2,blue=0)}
plot(x,col=getColor(x,provname,provcol,"white"),xlab="",ylab="");
你试试修改为:

length(provcol) <- length(pop)
provcol[pop>=1.22]=rgb(red=1-pop/max(pop)/2,green=0,blue=0)
provcol[pop<0.83]=rgb(red=1-pop/max(pop)/2,green=0,blue=0)
provcol[pop>=0.83 & pop<1.22]=rgb(red=1-pop/max(pop)/2,green=1-pop/max(pop)/2,blue=0)

plot(x,col=getColor(x,provname,provcol,"white"),xlab="",ylab="");
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-30 01:45:07
学习了。。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-1 08:09:07
貌似应该这样
复制代码

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群