删除美国州边界,在 ggplot2/geom_polygon 中创建轮廓区域

2023-11-22

我正在绘制下表,显示美国的多重耐药性趋势:

按地区划分的 MDR

使用以下代码:

states_map

m <- ggplot(ncftrendsort, aes(map_id = region)) + 
     geom_map(aes(fill = ncftrendsort$mdr), map = states_map, color = 'black') + 
     expand_limits(x = states_map$long, y = states_map$lat) + 
     theme_classic() + 
     scale_fill_continuous(name = "% MDR", low = 'white', high = 'black') +
     theme(axis.title.y = element_blank()) + 
     theme(axis.title.x = element_blank()) + 
     theme(axis.line = element_blank()) + 
     theme(axis.ticks = element_blank()) + 
     theme(axis.text.x = element_blank()) + 
     theme(axis.text.y = element_blank()) + 
     ggtitle('Regional Multi-Drug Resistant PSA (non-CF Patients), 1999-2012') + 
     theme(plot.title = element_text(size = 13, vjust = 2)) + facet_grid(Years ~.)

Which creates this: MDRstates

The map and data are all working just fine, but I want to remove the state borders and outline the regions I've delineated (capital-R 'Region' in dataset), so the map looks more like this:MDRregions

这些地图是不同的数据,因此解决方案不会匹配......而且我不担心轴标题或其他差异,只是担心区域边界。然而,我也想知道如何添加区域标签,如上面的顶部/白色/空地图中。尝试添加 geom_polygon 图层并认为这是关键,但我无法让它勾勒出我创建的区域。谢谢大家的帮助!!希望数据集适用于 dl...如果有更好的方法将文件共享到 SO,请发表评论。


由于某种原因,内置的 ggplot 多边形组合无法解决此问题,因此我使用单独的 shapefile 从头开始​​完成。

您会想要改变一些或大部分的美学。这只是一个例子。

注意:您的数据确实需要一些清理(错误的名称和拼写错误的状态)。

library(grid)
library(ggplot2)
library(maptools)
#library(ggthemes) # jlev14 was having issues with the pkg
library(rgdal)
library(rgeos)
library(dplyr)
library(stringi)

# added it here vs use ggthemes since jlev14 was having issues with the pkg
theme_map <- function(base_size = 9, base_family = "") {
  theme_bw(base_size = base_size, base_family = base_family) %+replace% theme(axis.line = element_blank(), axis.text = element_blank(), 
    axis.ticks = element_blank(), axis.title = element_blank(), panel.background = element_blank(), panel.border = element_blank(), 
    panel.grid = element_blank(), panel.margin = unit(0, "lines"), plot.background = element_blank(), legend.justification = c(0, 
      0), legend.position = c(0, 0))
} 

# get your data
ncftrendsort <- read.csv("~/Dropbox/mdrdata.csv", sep=" ", stringsAs=FALSE)

# get a decent US map
url <- "http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_500k.json"
fil <- "states.json"
if (!file.exists(fil)) download.file(url, fil)

# read in the map
us <- readOGR(fil, "OGRGeoJSON", stringsAsFactors=FALSE)
# filter out what you don't need
us <- us[!(us$NAME %in% c("Alaska", "Hawaii", "Puerto Rico")),]
# make it easier to merge
us@data$NAME <- tolower(us@data$NAME)

# clean up your broken data
ncftrendsort <- mutate(ncftrendsort,
                       region=ifelse(region=="washington, dc",
                                     "district of columbia",
                                     region))
ncftrendsort <- mutate(ncftrendsort,
                       region=ifelse(region=="louisana",
                                     "louisiana",
                                     region))
ncftrendsort <- filter(ncftrendsort, region != "hawaii")

# merge with the us data so we can combine the regions
us@data <- merge(us@data,
                 distinct(ncftrendsort, region, Region),
                 by.x="NAME", by.y="region", all.x=TRUE, sort=FALSE)

# region union kills the data frame so don't overwrite 'us'
regs <- gUnaryUnion(us, us@data$Region)
# takes way too long to plot without simplifying the polygons
regs <- gSimplify(regs, 0.05, topologyPreserve = TRUE)
# associate the polygons to the names properly
nc_regs <- distinct(us@data, Region)
regs <- SpatialPolygonsDataFrame(regs, nc_regs[c(2,1,4,5,3,6),], match.ID=FALSE)

# get region centroids and add what color the text should be and
# specify only the first year range so it only plots on one facet
reg_labs <- mutate(add_rownames(as.data.frame(gCentroid(regs, byid = TRUE)), "Region"), 
                   Region=gsub(" ", "\n", stri_trans_totitle(Region)),
                   Years="1999-2003", color=c("black", "black", "white", 
                                              "black", "black", "black"))

# make it ready for ggplot
us_reg <- fortify(regs, region="Region")

# get outlines for states and
# specify only the first year range so it only plots on one facet
outlines <- map_data("state")
outlines$Years <- "1999-2003"

gg <- ggplot()
# filled regions
gg <- gg + geom_map(data=ncftrendsort, map=us_reg,
                    aes(fill=mdr, map_id=Region),
                    color="black", size=0.5)
# state outlines only on the first facet
gg <- gg + geom_map(data=outlines, map=outlines,
                    aes(x=long, y=lat, map_id=region),
                    fill="#000000", color="#7f7f7f", 
                    linetype="dotted", size=0.25, alpha=0)
# region labels only on first facet
gg <- gg + geom_text(data=reg_labs, aes(x=x, y=y, label=Region), 
                     color=reg_labs$color, size=4)
gg <- gg + scale_fill_continuous(name="% MDR", low='white', high='black')
gg <- gg + labs(title="Regional Multi-Drug Resistant PSA\n(non-CF Patients), 1999-2012")
gg <- gg + facet_grid(Years~.)
# you really should use a projection
gg <- gg + coord_map("albers", lat0=39, lat1=45)
gg <- gg + theme_map()
gg <- gg + theme(plot.title=element_text(size=13, vjust=2))
gg <- gg + theme(legend.position="right")
# get rid of slashes
gg <- gg + guides(fill=guide_legend(override.aes=list(colour=NA)))
gg

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除美国州边界,在 ggplot2/geom_polygon 中创建轮廓区域 的相关文章

  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • R.matlab/readMat:readTag(this) 中出错

    我正在尝试使用 R matlab 将 matlab 文件读入 R 但遇到此错误 require R matlab r lt readMat file mat verbose T Trying to read MAT v5 file stre
  • 当每个记录都是一个段落并且某些记录有 4 个字段而其他记录有 6 个字段时,如何将文本文件读入 R

    如何读取文本文件 其中每条记录都是一个段落 每个换行符表示单独的字段 复杂的是 有些记录有 4 行 有些记录有 6 行 当字段数量的差异为 1 时 DWin 解决了我的问题 但当字段数量差异为 2 时 一切都崩溃了 你可以有一个在这里看看他
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 使用outer代替expand.grid

    我正在寻找尽可能快的速度并留在基地做该做的事expand grid做 我用过outer为过去类似的目的创建一个向量 像这样的东西 v lt outer letters LETTERS paste0 unlist v lower tri v
  • 表单提交时出现 rvest 错误

    我想从以下网页中抓取数据 https swgoh gg u zozo collection 180 emperor palpatine https swgoh gg u zozo collection 180 emperor palpati
  • 单击 R 中的 Sankey Chart 线时添加额外的标签值

    以下 R 闪亮脚本创建一个桑基图 如下面的快照所示 我的要求是 当我单击左右节点之间的任何链接 即 a1 和 a2 时 我希望相应的 a3 的总和出现在标签中 例如 a1 中的 A 和 a2 中的 E 总共具有值 50 和 32 因此 我想
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以
  • R - tidyr - 变异并传播多列

    我在 R 中有以下数据框 my df test lt data frame V1 c 1 2 1 V2 c A B A V3 c S1 S1 S2 V4 c x x x V5 c y y y V6 c A B C V7 c D E F my
  • Open Layers 3 根据矢量图层的范围将地图居中?

    我想根据矢量图层特征 点 来定位地图的中心和缩放级别 我有一个 geojson 文件正在填充我的地图 var vectorSource new ol source Vector url assets js data geojson form
  • 提取部分字符串值,创建新的列名称,并使数据框宽

    我想提取字符串列的最后一部分 始终用方括号括起来 将它们作为新列的名称 然后将数据从长调整为宽 并用这些值填充新列 例如 如果我有这个数据框 whatihave lt data frame v1 c abc effort def effor
  • R Tidytext 和 unnest_tokens 错误

    对 R 非常陌生 已经开始使用 tidytext 包 我正在尝试使用参数来填充unnest tokens函数 这样我就可以进行多列分析 所以而不是这个 library janeaustenr library tidytext library
  • ggplot 直方图相对于轴的位置不正确

    我试图这样绘制直方图 Todo lo haremos con base en un variable aleatoria Uniforme 0 1 set seed 26 n 10000 U lt runif n n Supongamos
  • r 谷歌搜索结果计数检索[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 用关键字 健康医院 搜索谷歌会返回大约 1 150 000 000 个结果 如何在 R 中以编程方式获得此计数 我见过这个lin ht
  • 迭代字符串 R 的字符

    有人可以解释一下为什么这不会在 R 中单独打印所有数字 numberstring lt 0123456789 for number in numberstring print number 字符串不就是字符数组吗 在 R 中该怎么做 In
  • ggplot2 可视化/显示中的地图错误?

    正如您在下面看到的 我使用 ggplots 制作的地图上存在一个奇怪的显示问题 任何投影似乎都会发生同样的问题 这是代码 仅包maps and ggplot2需要 mapWorld lt borders world colour gray5
  • 基于条件反应逻辑闪亮的 Flexdashboard

    我正在尝试有条件地进行一种类型的渲染 renderPlot 或其他 renderText 基于一些输入 这是我尝试过的 title Citation Extraction output flexdashboard flex dashboar
  • 使用函数参数作为 R 中新数据框的名称

    这很简单 但我已经搜索并未能找到这个小问题的解决方案 我想使用函数的参数作为新数据框的名称 例如 assign dataset lt function dataname x lt c 1 2 3 y lt c 3 4 5 dataname
  • 使用 purrr、broom 从许多单变量模型中获得整洁的输出

    我有一个由二进制结果列组成的数据框 y 和多个独立的预测列 x1 x2 x3 我想运行许多单变量逻辑回归模型 例如y x1 y x2 y x3 并将每个模型的指数系数 比值比 95 置信区间和 p 值提取到数据框 标题的行中 在我看来 使用

随机推荐

  • 从两个字符串数组返回公共元素的最有效方法

    在Java中 从两个字符串数组返回公共元素的最有效方法是什么 我可以用一对 for 循环来完成它 但这似乎不是很有效 我能想到的最好的办法就是转换为List然后申请retainAll 根据我的评论类似的问题 List
  • 什么时候应该使用 Set [例如用于 SpecialCells 返回值]?

    恐怕我误解了 VBA for excel 的文档 我有这行似乎是一个错误 Range a Selection SpecialCells xlCellTypeConstants 23 但这个就很好了 Set a Selection Speci
  • C#:获取完整的桌面大小?

    如何知道整个桌面的大小 Not 工作区 和not 屏幕分辨率 两者都仅指一个屏幕 我想找出每个显示器仅显示一部分的虚拟桌面的总宽度和高度 您有两个选择 演示框架 dll SystemParameters VirtualScreenWidth
  • 如何从另一个包中找到fxml?

    我创建了一个简单的JavaFX应用 它有两个包 主类是JFXTest2 java is in good包和 fxml 及其控制器位于JFXTest2包裹 现在的问题是我无法在主类中加载fxml 我尝试加载 fxml 像这样 Parent r
  • 与“operator==”不匹配 C++ 编译错误

    来自 C 新手的另一个问题 我收到以下代码块的编译器错误 与 operator 不匹配 void swap Team t1 Player p1 Team t2 Player p2 Player new t1 11 Player new t2
  • 如何在 SQL Server 中更新具有数百万行的大型表?

    I ve an UPDATE可以更新超过百万条记录的语句 我想批量更新它们 1000 或 10000 我尝试过 ROWCOUNT但我无法得到想要的结果 只是出于测试目的 我所做的是 我选择了包含 14 条记录的表并将行数设置为 5 此查询应
  • 如何在 ConstraintValidator 中自动装配服务

    我正在使用 Spring MVC 编写我的应用程序 我想验证用户注册时数据库中是否存在电子邮件 我已经编写了自己的注释约束 名为独特的电子邮件 我的用户实体用户 java Entity Table name users public cla
  • Spring RestTemplate 重定向 302

    我正在尝试使用 Spring Rest 模板执行登录请求 RestTemplate restTemplate new RestTemplate HttpHeaders headers new HttpHeaders headers setC
  • 如何在 jQuery 中截断字符串?

    我的标题很长 想截断它们 但要以一种不打断单词的方式 我的意思是剪切发生在单词之间 而不是剪切一个单词 我怎样才能使用 jquery 做到这一点 From jQuery 文本截断 阅读更多样式 尝试这个 var title This is
  • 如何使用 lapply() 将 NA 更改为 0?

    我有一个数据集列表 dfList lt list df1 df2 df3 每个数据集看起来都是这样的 apples oranges 1 2 NA 4 我想以编程方式更改每个数据帧的NAs to 0s 我该怎么做呢 到目前为止我的代码 lap
  • 如何在 SQL Server 中保存波斯日期时间?

    在过去的项目中 我尝试将时间格式保存为公历日期 并在应用程序的逻辑层将公历日期转换为波斯日期 但我厌倦了这样做 我需要在 SQL Server 中以波斯语格式保存和恢复日期时间 无需任何转换 sql server中的datetime2类型可
  • Html.DropDownList 选择的值无法使用 ViewBag 工作

    好吧 经过几个小时阅读这里的内容 尝试所有解决方案均未成功 还发现本文我以为这会救我的命 什么也没有 长话短说 这是我的视图 所有组合 Html DropDownList yearDropDown IEnumerable
  • 有没有办法备份 Visual Studio Team Services 项目?

    我提倡使用 Visual Studio Team Services 作为我们的源代码控制解决方案 并且实际上已经开始这样做了 然而 我的经理对云托管存储和服务有些担心 他想知道在团队服务因任何原因无法访问时我们的应急计划是什么 我已经指出
  • 如何删除圆内的一组网格点?

    我正在尝试创建一个网格网格 而没有一些落在具有指定坐标和半径的圆内的点 我无法减去落在圆圈内的网格点 这是我的代码 import math import numpy import matplotlib pyplot as plt N 50
  • 卷曲:(7)无法连接到本地主机端口8090:连接被拒绝

    需要帮忙 一直在尝试解决这个问题 但找不到答案 或者更确切地说 我还没有遇到任何答案 我有一个带有 NGINX 的 docker 容器 充当反向代理 适用于 Windows 的 Docker 版本 1 12 5 9503 upstream
  • Cygwin 命令未找到在 .bashrc 357\273\277 中发现错误字符

    我是 Cygwin 的新手 我刚刚安装了它并尝试设置一些简单的环境变量 但是 当我打开命令 shell 时 出现错误 357 273 277 command not found 我发现一篇文章讨论了问题是什么以及如何 发现 隐藏的坏性格 h
  • 如何在InnoSetup中只允许安装特定组件?

    所以问题是这样的 我在这里问了一个问题 如何只允许安装到特定文件夹 我怎样才能稍微修改它 例如 我有 3 个文件要安装 其中 2 个是可选的 并且只有在某个文件 文件夹存在时才可以安装 如果不满足条件 我想将在列表中选择它们的选项灰显 先感
  • 双卡双待安卓sdk

    sdk 默认 有什么方法可以处理双卡吗 市场上有许多双卡双待的 Android 手机 我想要的是以编程方式更改默认的SIM卡 是否可以 从 Android 5 1 开始多卡支持已正式添加到Android SDK中 您可以通过以下方式访问有关
  • 使用 JQuery 从 Div 中删除 CSS

    在我的应用程序中 我有以下内容 displayPanel div live click function this css background color pink font weight bolder 当我点击一个 Div 时 该 Di
  • 删除美国州边界,在 ggplot2/geom_polygon 中创建轮廓区域

    我正在绘制下表 显示美国的多重耐药性趋势 按地区划分的 MDR 使用以下代码 states map m lt ggplot ncftrendsort aes map id region geom map aes fill ncftrends