作者locka (locka)
看板R_Language
标题[问题] 用ggplot2在地图上画点
时间Fri Jan 8 19:30:03 2016
各位好:
手上有一些经纬度的资料,参考以下这篇,想要如法炮制把点绘制在地图上
http://goo.gl/jMxvkr
画出来的图大概长这样:
http://i.imgur.com/dnnWmth.jpg
想知道有没有方法让每张图只聚焦在该行政区,
而不是都是用同一张底部的图层,导致点都集中在一起呢?
附上我的范例资料集:
https://db.tt/sKFmtWq0
程式码:
library(ggmap)
library(mapproj)
data <- read.csv("ntp.gis.csv",fileEncoding="UTF-8",header=TRUE)
map <- get_map(location="Taipei", zoom=11, language="zh-TW",color="bw")
ggmap(map) +
geom_point(aes(x=zip_x,y=zip_y), color="red", data = data) +
facet_wrap(~district)
有试过 facet_wrap(~district, scale="free"),不过会得到错误讯息:
Error in facet_render.wrap(plot$facet, panel, plot$coordinates, theme, :
ggplot2 does not currently support free scales with a non-cartesian
coord or coord_flip.
另外还有第二个问题就是,
是不是一旦get_map() 指定了地点跟zoom的大小,似乎就不能变动了?
像如果想针对板桥的地图放大,我得先自己在google map上取大概的中心点座标
再丢到get_map()里面:
map <- get_map(location = c(lon = 121.453220, lat = 25.006734), zoom = 14,
language = "zh-TW", color = "bw")
ggmap()...
这样对我来说有点太大,但是zoom调成15又会有许多点被忽略...
请问get_map()有办法根据资料的散布自动取最适合的zoom-in尺度吗?
或是其他建议的做法?
最後第三个问题想请教的是(抱歉问题有点多QQ)
请问ggmap上面经纬度的精确度有办法提高吗?
以上面第二个例子来说,做出来的图很明显都集中在某些点,
就算使用position_jitter()效果仍然有限
(1万多笔资料却只有30多个点)
可是原始资料的经纬度有到小数点後10几位,所以觉得有点纳闷
http://i.imgur.com/GO1T5fP.jpg
网页版范例程式码在这:
http://ideone.com/D6FtYK
想请教看看大家的想法,谢谢大家!!
[关键字]:
gis, ggplot2, google map
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.25.100
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1452252608.A.9DD.html
※ 编辑: locka (140.112.25.100), 01/08/2016 19:41:06
来自问自答(然後再自问)一下:
使用cowplot套件, 可以各自画好不同地方的ggmap然後再一起呈现出来
library(cowplot)
plot_grid( ggmap1, ggmap2, ggmap3, labels=c("板桥区","中和区","三重区",
nrow=1, ncol=3)
效果大概是这样:
http://i.imgur.com/JWLufOg.png
第二个问题用source改用osm的话, 就不需要自己找中心点了
不过看样子zoom-in的参数值仍是要自己决定
然後有关第三个问题,
想请教大家在R中要怎麽知道现在数值的精确度?
我发现从R上看的数值跟我把data输出到csv上不一样
(R中看到是小数点後四位, 输出的csv大概有到小数点後10位)
那我要怎麽知道电脑实际上在运算画图时是用哪个呢?
http://i.imgur.com/OeiEkWf.png
先谢谢大家了>"<
※ 编辑: locka (140.112.25.100), 01/11/2016 18:39:41