向 ggmap 添加一堆箭头

2024-03-29

我正在绘制一张地图,它应该覆盖来自数据集的多个(> 400)箭头,其中每个箭头的起点和终点都有纬度/经度对。这是使用 dput 的数据子集:

df <- structure(list(Lat = c(49.34054, 49.34068, 49.3409, 49.34106, 
49.34116, 49.34133, 49.34138, 49.34144, 49.34155, 49.34164, 49.34168, 
49.34178, 49.34179, 49.34187, 49.34199, 49.34202, 49.3421, 49.34219, 
49.34226, 49.34236, 49.3424), Lon = c(-117.76365, -117.76433, 
-117.76474, -117.76575, -117.76646, -117.76607, -117.76643, -117.76676, 
-117.76611, -117.76638, -117.76678, -117.76612, -117.7671, -117.76678, 
-117.76776, -117.76745, -117.76706, -117.76815, -117.76778, -117.76762, 
-117.76812), LatEnd = c(49.3404216917208, 49.3404813977525, 49.3407696999527, 
49.3409218055133, 49.3408834255181, 49.3411571438575, 49.3411444104952, 
49.3412068979592, 49.3413453850968, 49.3414853385912, 49.3414067819334, 
49.3415646398153, 49.3415782191525, 49.3416671210859, 49.341769715577, 
49.3418702688525, 49.3418749917805, 49.3419107724121, 49.3418905356976, 
49.3421097403974, 49.3419881060831), LonEnd = c(-117.76319214364, 
-117.763951728004, -117.76423214535, -117.765201260725, -117.766005995062, 
-117.765592930919, -117.765831425366, -117.766367701412, -117.765558298351, 
-117.765915748408, -117.766324336458, -117.765721708226, -117.766709104693, 
-117.766420637063, -117.767340559198, -117.767000983228, -117.766699658212, 
-117.767827633167, -117.767235785716, -117.767302080608, -117.767699155441
)), .Names = c("Lat", "Lon", "LatEnd", "LonEnd"), row.names = c(244L, 
263L, 293L, 313L, 330L, 351L, 359L, 369L, 390L, 409L, 414L, 426L, 
427L, 435L, 442L, 443L, 448L, 450L, 455L, 457L, 459L), class = "data.frame")

我以前使用过 ggmap,因此这是我的第一次尝试:

library(ggplot2)
library(ggmap)

prep <- get_googlemap(
center = c(-117.7670, 49.34027), #Long/lat of centre, or "Edinburgh"
zoom = 17, 
maptype = 'hybrid', #also hybrid/terrain/roadmap/satellite
scale = 2)

map <- ggmap(prep, 
    size = c(100, 200),
    extent='device', 
    darken = 0.5,
    legend = "bottom",
    base_layer = ggplot(data = df, aes(x = Lon, y = Lat))) 

p <- map +
    geom_segment(aes(xend = LonEnd, yend = LatEnd),
            arrow = arrow(length = unit(0.2,"cm"), angle = 15), size = 0.3, colour = "white") 

这产生了一个非常奇怪的结果——一些箭头的头部画错了方向。

然后我继续尝试使用 geom_path 代替。它纠正了头部的方向,但要求我单独输入数据集的每一行作为 geom_path 的输入。我做了一个 for 循环,但显然发生的事情是,每次添加一层(“i”增加一层)时,所有先前的层都会消失。

Lons <- cbind(df$Lon, df$LonEnd)
Lats <- cbind(df$Lat, df$LatEnd)

map <- ggmap(prep, 
    size = c(100, 200),
    extent='device', 
    darken = 0.5,
    legend = "bottom",
    base_layer = ggplot(data = df[1,], aes(x = Lon, y = Lat))) 


p <- map + geom_path(aes(x = Lons[10,], y = Lats[10,]),
                arrow = arrow(length = unit(0.2,"cm"), angle = 15), size = 0.3, colour = "white")

for(i in 2:nrow(Lats)){
        p <- p + geom_path(aes(x = Lons[i,], y = Lats[i,]),
        arrow = arrow(length = unit(0.2,"cm"), angle = 15), size = 0.3, colour = "white") 
                } #i

非常感激任何的帮助...


这是通过添加以下内容实现的解决方案ends="first"选项给你的arrow()称呼。此外,还需要通过重新分配来反转段方向x to xend, etc.

功劳归于谷歌和https://collab.firelab.org/svn/big-butte/forecast_tools/plotObsVectors.R https://collab.firelab.org/svn/big-butte/forecast_tools/plotObsVectors.R

您的原始代码使用geom_segment在标准中使用时工作正常ggplot情节,所以我假设ggmap正在用箭头和线段做一些意想不到的事情。可能值得通知作者。

library(grid) # provides `arrow` function.

p0 <- ggplot() +
      geom_segment(data=df, aes(x=Lon, y=Lat, xend=LonEnd, yend=LatEnd),
          arrow = arrow())

map <- ggmap(prep, size=c(100, 200), extent="device", darken=0.5, 
             legend="bottom") 

p1 <- map + 
     geom_segment(data=df, aes(x=LonEnd, y=LatEnd, xend=Lon, yend=Lat), 
         arrow=arrow(ends="first"), colour="white") 

library(gridExtra)
ggsave(arrangeGrob(p0, p1, nrow=1), file="plots.png", 
    width=12, height=6, dpi=150)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向 ggmap 添加一堆箭头 的相关文章

  • 将阿拉伯文本分配给 R 变量

    R 无法正确显示阿拉伯文本 当我使用阿拉伯语时 我得到了非常奇怪的东西 这是一个屏幕截图 问题是我想创建一个带有阿拉伯文本的词云 我需要首先解决这个问题 R 版本 R 2 15 2 GUI 1 53 Leopard 版本 64 位 6335
  • 如何处理重叠的因子水平? (例如,生成表格和图表时)

    我面临一个数据集的问题重叠因素水平 我想按因素级别生成时间线 条形图和统计数据 但是 我希望因子水平是模棱两可的 这意味着属于多个级别的观察结果应该在图中出现多次 这是我的数据结构的示例 head lt c ID YEAR BRAZIL G
  • 为 RStudio Server 1.0.44 配置日志目录

    我在 CentOS 7 上运行 RStudio Server 1 0 44 根据文档 https support rstudio com hc en us articles 200554766 RStudio Server Applicat
  • 在 R 中使用 gamlss::lms 选择百分位数曲线

    我正在使用 gamlss 包中的示例代码来绘制百分位数曲线 library gamlss data abdom lms y x data abdom n cyc 30 它正在绘制自己的一组百分位数曲线 如何选择只绘制第 10 50 和 90
  • 在knitr中打印漂亮的交叉表

    我想要的是使用 R Markdown 和 knit 从 RStudio 打印漂亮的交叉表 无论是在 pdf 文件中 还是在 html 文件中 我怀疑我错过了一些非常明显的东西 因为我不敢相信这是如此困难 我使用 xtabs 或 ftable
  • 为什么安装的“igraph”包在加载后返回“libicui18n.so.58:无法打开共享对象文件”?

    我试图使用命令 install packages igraph 在 R 中安装 igraph 包 安装后 在测试阶段出现以下错误 测试是否可以加载已安装的包错误 包或命名空间 dyn load file DLLpath DLLpath 中的
  • left_join 表示列不存在,即使它存在

    我想用两个不同的变量 tp join 连接两个数据框 出现错误 表示无法在第二个数据帧中找到变量 但是当我运行函数 colnames 时 会显示列名称 为什么会这样呢 df new lt left join master settlemen
  • 用于更改向量中元素顺序的闪亮小部件

    在很多网站上 您都有一个拖放界面来更改列表中元素的顺序 我正在寻找类似的东西闪亮 我希望用户能够拖放列表中的元素 通过更改顺序来更改优先级 现在我有一个滥用的解决方案selectizeInput 这是可行的 但当选择列表变得更大时 它很快就
  • 如何在ggplot2中使用希腊符号?

    我的类别需要用希腊字母命名 我在用ggplot2 并且它与数据配合得很好 不幸的是 我无法弄清楚如何将这些希腊符号放在 x 轴上 在刻度线处 并使它们出现在图例中 有什么办法可以做到吗 更新 我看了一下link https github c
  • R Shiny - 修复了 Shiny 仪表板中的侧边栏和主标题

    我有一个简化的闪亮仪表板 请参阅下面的代码 我想修复侧边栏和主标题 因此 在其他帖子的帮助下 我编写了一个 CSS 文件来解决该问题 sidebar color FFF position fixed width 220px white sp
  • 在多面图中用 N 注释 x 轴

    我正在尝试生成一些按治疗条件和访问次数细分的数字结果的箱线图 每个框中的观察次数都放在图下方 并且也标记了访问次数 这里有一些虚假数据可以用来说明 我举了两个我尝试过但不太有效的例子 library ggplot2 library plyr
  • 为 ggplot 定义新的尺度轴变换

    我正在尝试创建一个squared使用 y 轴变换scales trans new但遇到错误 MWE data data frame x 1 10 y runif 10 z rnorm 10 10 library ggplot2 ggplot
  • 自动将变量名称添加到列表的元素[重复]

    这个问题在这里已经有答案了 我有一个模型列表 为了使代码更易于维护 因此可以方便地添加和删除模型 我希望有一个地方来存储它们及其名称 为此 我必须解决以下命名问题 上游 我生成模型的方式比以下方式效率低 如果是这样压缩的 我会assign他
  • 如何获得 R 帮助?

    R 包可能有哪些可用文档 例如我尝试理解sp包裹 此外help sp 还有哪些用于搜索帮助和文档的其他功能 获取有关您知道其名称的函数的帮助 Use http www inside r org r doc utils Question或者
  • 使用 plyr daply 将数据帧转换为矩阵

    我正在尝试使用daply函数在plyr包 但我无法让它正确输出 尽管组成矩阵的变量是数字 但矩阵的元素是列表 而不是变量本身 例如 以下是一小部分数据 Month Vehicle Samples 1 Oct 10 31057 256 2 O
  • 创建后修改 ggplot 对象

    有没有首选的修改方式ggplot创建后的对象 例如 我建议我的学生将 r 对象与 pdf 文件一起保存以供以后更改 library ggplot2 graph lt ggplot mtcars aes x mpg y qsec fill c
  • R 中的 Mapdeck 包 - add_grid 似乎未渲染任何内容

    Problem The add gridR 中的函数mapdeck包很精彩 然而 遵循CRAN 文档 https cran r project org web packages mapdeck mapdeck pdf 我似乎无法获得任何数据
  • 如何使用 tidyr 将向量中字符串中的每个字符分隔到一列中

    我想将向量中的每个字符串分成列 但我做不到 library tidyr library dplyr df lt data frame x c abe bas dds eer df gt separate x c A B C sep 1 我想
  • 如何在knitr中安装软件包?

    到目前为止 我一直在使用这段代码来加载 R 包并编写 R 文件 但我正在尝试使用knitr rm list ls all TRUE kpacks lt c ggplot2 install github devtools mapdata ne
  • 如何使用 grid.arrange 移动图例位置

    我试图在一页中排列 4 个图 将图例放在底部中心 我用它来获取其中一个图的图例 因为它们对于四个图来说是相同的 get legend lt function myggplot tmp lt ggplot gtable ggplot buil

随机推荐