美文网首页
跟着NBT学做图:样本地理信息图

跟着NBT学做图:样本地理信息图

作者: 小汪Waud | 来源:发表于2022-09-01 11:55 被阅读0次

    今天我们来学习一下刘永鑫老师2019年发表在Nature Biotechnology上的文章NRT1.1B is associated with root microbiota composition and nitrogen use in field-grown rice中的代码。

    其代码和数据都已经在其github[1]免费分享,按下图操作即可全部打包。下载缓慢的朋友也可在同名gzh回复「20220902」获得压缩包。

    图1 a主要介绍了本研究中样本籼稻(indica)和粳稻(japonica)的位置。

    源代码

    首先我放上经过我详细注释后的代码。

    library(dplyr)
    library(maptools)
    library(ggthemes)
    library(ggplot2)
    library(maps)

    geotable = read.table("varieties_geo.txt", header = T, sep = "\t") # 读取地理信息
    worldmap = map_data("world") # 引入世界地图数据
    # 通过?map_data查看,仅能提供county,france,italy,nz,state,usa,world,world2等几款地图

    fig1 = ggplot(geotable, aes(Longitude, Latitude, color = Subspecies)) +
      geom_polygon(data = worldmap, aes(x = long, y = lat, group = group, fill = NA), 
                   color = "grey70", size = 0.25)+ # 绘制地图
      geom_point(size = 2, alpha = 0.5)+ # 绘制具体的位置点
      scale_colour_brewer(palette = "Set1") + # 设置主题颜色
      scale_fill_brewer(palette = "Set1")+  # 设置主题颜色
      scale_y_continuous(breaks = (-3:3)*30)+ # 将Y轴的刻度限制为-90~90
      scale_x_continuous(breaks = (-6:6)*30)+ # 将X轴的刻度限制为-180~180
      labs(x="Longitude", y="Latitude", colour = "Subspecies" ) + # 修改X轴、Y轴及图例
      theme_tufte() # 需要library(ggthemes)
    fig1
    ggsave(paste0(output_dir, "minicore-worldmap.pdf", sep=""), fig1, width = 9, height = 5)

    函数详解

    map_data()

    map_data()[2]是ggplot2的一个函数,用于将map包中的数据转换为适合ggplot2绘图的框架。

    「主要用法」

    map_data(map, region = ".", exact = FALSE, ...)

    「主要参数」

    • map:可以提供的地图,包括county(United States County Map), france,italy, nz(New Zealand Basic Map),state(United States State Boundaries Map), usa(United States Coast Map), world(Low (mid) resolution World Map), world2(Pacific Centric Low resolution World Map)。
    • region:包含子区域的名称,默认包含所有子区域。
    • exact:将region视为正则表达式(FALSE)还是固定字符串(TRUE)。

    「示例」

    library(ggplot2)
    states <- map_data("state") # 引入美国地图
    arrests <- USArrests
    names(arrests) <- tolower(names(arrests)) # 将arrests的列名改为小写
    arrests$region <- tolower(rownames(USArrests)) # 将USArrests的行名转换为小写并作为新增的一列保存为region,用于后续合并

    choro <- merge(states, arrests, sort = FALSE, by = "region") # 通过region合并states和arrests
    ggplot(choro, aes(long, lat)) + # 根据经纬度绘制地图
      geom_polygon(aes(group = group, fill = assault)) +
      coord_map("albers", lat0 = 45.5, lat1 = 29.5) 
    # coord_map() 将地球的一部分近似球面投影到一个平面的2D平面上
    # albers(lat0,lat1):equal-area, true scale on lat0 and lat1

    USArrests[3]包含了1973年美国50个州每10万居民中因袭击(assault)、谋杀(murder)和强奸(rap)而被捕的人数,还给出了生活在城市地区的人口百分比(urbanpop,Percent urban population)。

    geom_polygon()

    geom_polygon()[4]非常类似于由geom_path()绘制的路径,只不过起始点和结束点相连,内部可以填充。group映射决定了哪些case被连接在一起成为一个多边形。

    「主要用法」

    geom_polygon(
      mapping = NULL,
      data = NULL,
      stat = "identity",
      position = "identity",
      rule = "evenodd",
      ...,
      na.rm = FALSE,
      show.legend = NA,
      inherit.aes = TRUE)

    「主要参数」

    • mapping:同ggplot2
    • data:同ggplot2
    • stat:使用的统计转换
    • position:位置调整
    • rule:可选evenodd或winding,如果要绘制带孔的多边形,这个参数定义了如何解释孔的坐标,示例[5]。
    • na.rm:默认情况下(False),缺失值会被移除并警告;选择True,缺失值会被悄无声息的移除。
    • show.legend:默认不展示。
    • inherit.aes:如果选择False,将会覆盖默认的映射(aesthetics),而不是将它们结合。

    「注意⚠️」

    在源代码中,关于geom_polygon的参数group,有一点需要注意。

    geom_polygon(data = worldmap, aes(x = long, y = lat, group = group, fill = NA), 
                   color = "grey70", size = 0.25)

    在这里group=group,而观察后我们发现,每个region对应了一个group,比如Aruba对应group 1,Afghanistan对应group 2,enclave对应group 1627,既然这样,能否group=region呢?

    此时你应该明白,地图数据中的group是有意义的,决定了连线的先后顺序,在其他地图包中也有该顺序。

    美化

    我对代码进行了微调,包括地图背景颜色、字/点的大小、透明度,把图限制在了一定区间范围,同时修改了主题。

    library(dplyr)
    library(maptools)
    library(ggthemes)
    library(ggplot2)
    library(maps)
    library(ggsci)
    geotable = read.table("varieties_geo.txt", header = T, sep = "\t") # 读取地理信息
    worldmap = map_data("world") # 引入世界地图数据
    # 通过?map_data查看,仅能提供county,france,italy,nz,state,usa,world,world2等几款地图

    fig = ggplot(geotable, aes(Longitude, Latitude, color = Subspecies)) +
      geom_polygon(data = worldmap, aes(long, lat, group = group, fill = NA), 
                   color = "grey70",fill = "#F5F5DC", size = 0.25) + # 绘制地图
      geom_point(size = 1.7, alpha = 0.8)+ # 绘制具体的位置点
      labs(x="Longitude", y="Latitude", color = "Species" ) + # 修改X轴、Y轴及图例
      coord_cartesian(xlim = c(-120,150), ylim = c(-40,70)) +
      theme_tufte() + # 需要library(ggthemes) 
      theme(axis.ticks = element_line(linetype = "blank"), # 去掉坐标轴
      axis.text = element_text(colour = NA), # 去掉坐标轴的数字标记
      panel.background = element_rect(fill = '#F0FFFF'), # 背景色
      axis.title = element_text(size = 13),
      legend.text = element_text(size = 10),
      legend.title = element_text(size = 12),
      legend.position = c(0.06, 0.075)) + # 修改图例位置
      scale_color_aaas() # 修改主题 
     
    fig

    如果你用上了他们的代码,请务必按照下列方法引用:

    Jingying Zhang#, Yong-Xin Liu#, Na Zhang#, Bin Hu#, Tao Jin#, Haoran Xu, Yuan Qin, Pengxu Yan, Xiaoning Zhang, Xiaoxuan Guo, Jing Hui, Shouyun Cao, Xin Wang, Chao Wang, Hui Wang, Baoyuan Qu, Guangyi Fan, Lixing Yuan, Ruben Garrido-Oter, Chengcai Chu* & Yang Bai*. NRT1.1B is associated with root microbiota composition and nitrogen use in field-grown rice. Nature Biotechnology. 2019. doi:10.1038/s41587-019-0104-4

    参考资料

    [1]

    github链接: https://github.com/microbiota/Zhang2019NBT

    [2]

    map_data(): https://ggplot2.tidyverse.org/reference/map_data.html

    [3]

    USArrests: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/USArrests

    [4]

    geom_polygon(): https://ggplot2.tidyverse.org/reference/geom_polygon.html

    [5]

    geom_polygon() rule参数示例: https://rdrr.io/r/grid/grid.path.html

    本文使用 文章同步助手 同步

    相关文章

      网友评论

          本文标题:跟着NBT学做图:样本地理信息图

          本文链接:https://www.haomeiwen.com/subject/pjgenrtx.html