这篇文章主要介绍了ggplot2中怎么自定义数据地图版面范围,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
之前联系过程中遇到的一个小技术问题,就是在ggplot2制作数据地图时,使用标度调整参数进行范围限定时,总是出现错误,版面上出现交错的线条和条带。
应该是自己添加的标度限定参数与ggplot2映射规则出现了冲突,特别再加上空间投影参数,这种冲突和错乱就显得更加明显。
其实我就是想要获取这样一幅数据地图,而不是做完整个世界地图之后再去裁剪导出的图片。(那样会显得很不fashion)。
library("ggplot2")
library("plyr")
library("maptools")
library("ggthemes")
options(stringsAsFactors=FALSE,warn=FALSE)
world_map <-readShapePoly("D:/R/rstudy/wold_map/World_region.shp")
x <- world_map@data
xs <- data.frame(x,id=seq(0:250)-1)
world_map1 <- fortify(world_map)
world_map_data <- join(world_map1, xs, type = "full")
mydata <- read.csv("D:/R/rstudy/wold_map/Region_map.csv")
mydata$fam<-cut(mydata$zhibiao1,breaks=c(0,100,200,300,400,500),labels=c('0~100','100~200','200~300','300~400','400~500'),order=TRUE,include.lowest=TRUE)
world_data <- join(world_map_data, mydata, type="full")
这是完整的世界地图:
windowsFonts(myfont=windowsFont("微软雅黑 Light"))
ggplot(world_data, aes(x = long, y = lat, group = group,fill =fam)) +
geom_polygon(colour="white")+
scale_fill_brewer(palette="Blues") + ###Blues&Greens
ggtitle("某公司2015~2016年度营业状况分布图")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.08,0.4),legend.text.align=1)
倘若我想将该地图版面聚焦到中国的领土范围内,但是呢,又不想单独呈现孤零零的中国地图,我需要中国周边的这些邻国边界,来锁定中国在亚洲地区的大致位置,这些周边领国边界不要求都拥完整的行政区划,可以根据版面的需要,进行矩形切割就行。
这样看起来必须对世界地图进行切割,而且需要切割的是美学映射参数x,y的范围(也就是坐标系统的范围)。
我们都知道在ggplot2系统中,调整X,Y的标度范围拥有布置一个的可选参数:
xlim/ylim
expand_limits()
scale_x/y_continuous()
其实坐标轴系统中也可以嵌入标度调整参数:
coord_map()
那么应该使用哪个方法进行调整呢,这里就卖个关子,我们一个一个来尝试:
切割的范围为:
经度:60~155
维度:0~65
这个范围刚好可以涵盖我国领土的完整范围:
方案一:xlim/ylim
ggplot(world_data, aes(x = long, y = lat, group = group,fill =fam)) +
geom_polygon(colour="white")+
xlim(60,155)+ylim(0,65)+
scale_fill_brewer(palette="Blues") +
coord_map("polyconic") +
ggtitle("某公司2015~2016年度营业状况分布图")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.08,0.4),legend.text.align=1)
切割效果如下,有反馈但是效果不佳,未达到目的,第一种方案宣告失败。
方案二:expand_limits()
ggplot(world_data, aes(x = long,y=lat,group=group)) +
geom_polygon(aes(fill =fam),colour="white")+
expand_limits(x=c(60,155),y=c(0,65))+
scale_fill_brewer(palette="Blues") +
coord_map("polyconic") +
ggtitle("某公司2015~2016年度营业状况分布图")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.08,0.4),legend.text.align=1)
这次结果又失败了,不仅没有完成目标,底部还出现了一条莫名其妙的线条。
方案三:scale_x/y_continuous()
ggplot(world_data, aes(x = long, y = lat, group = group,fill =fam)) +
geom_polygon(colour="white")+
scale_x_continuous(limits=c(60,155))+
scale_y_continuous(limits=c(0,65))+
scale_fill_brewer(palette="Blues") +
coord_map("polyconic") +
ggtitle("某公司2015~2016年度营业状况分布图")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.08,0.4),legend.text.align=1)
第三种方案又以失败告终,结果跟第一种的问题一模一样。
那么现在就剩最后一一种方案啦,希望这次能成功。
方案四:coord_map()
ggplot(world_data,aes(x =long,y=lat,group=group,fill=fam))+
geom_polygon(colour="white")+
scale_fill_brewer(palette="Blues") +
coord_cartesian(xlim=c(60,155),ylim=c(0,65))+
ggtitle("某公司2015~2016年度营业状况分布图")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.88,0.3),legend.text.align=1)
ok,这次成功了,但是我放弃了使用coord_map()空间投影参数,而是使用了普通的笛卡尔二维坐标。
在ggplot2版面中制作数据对图,想要对版面进行有效的控制,需将标度范围的调整参数在坐标系内进行限定,否则会出现错乱,而是在限定范围的同时可能需要放弃使用空间投影(有没有更好的解决方案,目前还未知,留待以后解决)。
感谢你能够认真阅读完这篇文章,希望小编分享的“ggplot2中怎么自定义数据地图版面范围”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。