如何为形状添加阴影

2023-12-21

是否可以使用ggrough (https://xvrdm.github.io/ggrough/index.html https://xvrdm.github.io/ggrough/index.html) 对创建的形状进行着色geom_sf(首选)或可能geom_polygon?请参阅此问题了解先前的问题,该问题给出了我想要的情节的外观以及 Z.Lin 的随附答案,该答案修改了程序包以使其与当前版本兼容ggplot2: 无法复制此 ggplot2 图 https://stackoverflow.com/questions/63759571/unable-to-replicate-this-ggplot2-plot?noredirect=1#comment112795312_63759571.

这是使用创建的地图的 MWEgeom_sf我想使用(每个县)来遮蔽ggrough:

library(tidyverse)
library(magrittr)
library(ggplot2)
library(ggrough)
library(RColorBrewer)
library(tidycensus)
library(viridis)
#install.packages("devtools") # if you have not installed "devtools" package
#devtools::install_github("xvrdm/ggrough")
library(hrbrthemes)

#get nevada shapefile
counties <- get_acs(
    geography = "county", year = 2018, geometry = TRUE,
    variables = "B19013_001", keep_geo_vars=TRUE
) %>% filter(STATEFP=="32")
counties$GEOID <- as.integer(counties$GEOID)
#############

a <- ggplot() +
    geom_sf(data = counties, aes(fill = estimate)) + 
    scale_fill_viridis(discrete=FALSE, name="", guide=FALSE) +  
    theme_bw() +
    theme(legend.position = c(0.15, .15)) +
    theme(plot.subtitle = element_text(hjust = 0.8, vjust=-10, size=30)) +  
    theme(panel.background = element_rect(fill = 'white')) +
    theme(panel.grid = element_blank(),axis.title = element_blank(),
          axis.text = element_blank(),axis.ticks = element_blank(),
          panel.border = element_blank())+
    theme(legend.position = c(0.25, .15), legend.key.size = unit(2,"line"),
          legend.title=element_text(size=16), 
          legend.text=element_text(size=14), 
          legend.direction = "vertical", 
          legend.box = "horizontal") +
    labs(caption = "")
a 

这会产生以下结果:

我怎样才能使用此地图的县的阴影ggrough或者这是不可能的?请注意,我认为ggrough可以处理geom_col, geom_bar, geom_tile, geom_geom_area, geom_ribbon, geom_violin, geom_point, geom_jitter, geom_dotplot, geom_line, and geom_smooth,但我不确定geom_sf or geom_polygon;如果没有,添加它们是否容易?

***更新 这是另一个例子,摘自https://ggplot2.tidyverse.org/reference/ggsf.html https://ggplot2.tidyverse.org/reference/ggsf.html:

nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
b <- ggplot(nc) +
    geom_sf(aes(fill = AREA))
b

这会产生:

***更新结束

(Here is an example, created with ggrough, of how I want the shading of the counties to look: enter image description here )

这是一次失败的尝试(再次依赖于 Z.Lin 的答案中的代码:无法复制此 ggplot2 图 https://stackoverflow.com/questions/63759571/unable-to-replicate-this-ggplot2-plot?noredirect=1#comment112795312_63759571):

parse_polygons <- function (svg) {
    shape <- "polygon" # was "polyline" in ggrough:::parse_areas
    keys <- NULL
    ggrough:::parse_shape(svg, shape, keys) %>% {
        purrr::map(., 
                   ~purrr::list_modify(.x, 
                                    points = stringr::str_squish(.x$points) %>% 
                                        {stringr::str_glue("M{.}Z")}, 
                                    shape = "path"))
    }
}

trace(ggrough:::parse_rough, edit = TRUE)

# paste the following function into the pop-up window
function (svg, geom) {
    rough_els <- list()
    if (geom %in% c("GeomCol", "GeomBar", "GeomTile", "Background")) {
        rough_els <- append(rough_els, parse_rects(svg))
    }
    if (geom %in% c("GeomSmooth", "Background")) {   # removed GeomArea / GeomViolin from here
        rough_els <- append(rough_els, parse_areas(svg))
    }
    if (geom %in% c("GeomArea", "GeomRibbon", "GeomViolin")) {  # new condition here
        rough_els <- append(rough_els, parse_polygons(svg))
    }
    if (geom %in% c("GeomPoint", "GeomJitter", "GeomDotPlot", "Background")) {
        rough_els <- append(rough_els, parse_circles(svg))
    }
    if (geom %in% c("GeomLine", "GeomSmooth", "Background")) {
        rough_els <- append(rough_els, parse_lines(svg))
    }
    if (geom %in% c("Background")) {
        rough_els <- append(rough_els, parse_texts(svg))
    }
    purrr::map(rough_els, ~purrr::list_modify(.x, geom = geom))
}

options <- list(GeomSf=list(fill_style="hachure", 
                              angle_noise=0.5,
                              gap_noise=0.2,
                              gap=1.5,
                              fill_weight=1))
get_rough_chart(a, options)

这会产生错误消息:

Error in `*tmp*`[[i]] : subscript out of bounds

***更新

或者用第二个例子:

options <- list(GeomSf=list(fill_style="hachure", 
                          angle_noise=0.5,
                          gap_noise=0.2,
                          gap=1.5,
                          fill_weight=1))
get_rough_chart(b, options)

同样的错误。

***更新结束。

另请注意,可以使用以下命令创建地图geom_polygon,所以这也很有趣,不过geom_sf是优选的。


library(magrittr)
library(ggplot2)
library(ggrough)

Replace parse_rough using trace

trace(ggrough:::parse_rough, edit=TRUE)

在弹出窗口中,粘贴此内容,以便parse_rough将使用parse_sf for GeomSf.

function (svg, geom) 
{
  rough_els <- list()
  if (geom %in% c("GeomCol", "GeomBar", "GeomTile", 
                  "Background")) {
    rough_els <- append(rough_els, parse_rects(svg))
  }
  if (geom %in% c("GeomArea", "GeomViolin", "GeomSmooth", 
                  "Background")) {
    rough_els <- append(rough_els, parse_areas(svg))
  }
  if (geom %in% c("GeomPoint", "GeomJitter", "GeomDotPlot", 
                  "Background")) {
    rough_els <- append(rough_els, parse_circles(svg))
  }
  if (geom %in% c("GeomLine", "GeomSmooth", "Background")) {
    rough_els <- append(rough_els, parse_lines(svg))
  }
  if (geom %in% c("Background")) {
    rough_els <- append(rough_els, parse_texts(svg))
  }
  if (geom %in% c("GeomSf")) {
    rough_els <- append(rough_els, parse_sf(svg))
  }
  purrr::map(rough_els, ~purrr::list_modify(.x, geom = geom))
}

创建函数parse_sf.

parse_sf <- function (svg) {
  shape <- "path"
  keys <- NULL
  ggrough:::parse_shape(svg, shape, keys) %>% {
    purrr::map(., 
               ~purrr::list_modify(.x, 
                                   points = .x$d, 
                                   shape = "path"
               ))
  }
}

创建所需的情节

nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
b <- ggplot(nc) +
  geom_sf(aes(fill = AREA))
b


options <- list(GeomSf=list(fill_style="hachure", 
                            angle_noise=0.5,
                            gap_noise=0.2,
                            gap=1.5,
                            fill_weight=1))
get_rough_chart(b, options)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为形状添加阴影 的相关文章

  • 在 R 中将时间从数字转换为时间格式

    我从 xls 文件中读取数据 显然 时间格式不正确 如下 举例 0 3840277777777778 0 3847222222222222 0 3854166666666667 确实 他们应该是 09 12 09 13 09 13 我不知道
  • 按钮:带滚动条的下载按钮仅下载几行

    我正在处理超过 100 000 行的表并使用DT包裹 开发版本0 1 56 在 Shiny App 中将其可视化 此外我正在使用DT扩展如下 Buttons 下载不同格式的数据 然而虽然Scroller扩展程序也已激活 我只能下载几行 不是
  • 使用 google 查询邮政编码距离

    我有两个邮政编码列表 R 语言 其中一个是孩子的地址及其学业成绩 另一个是学校的地址 我希望能够为每个孩子找到最近的学校 所以大概需要通过转换为长和纬度值来计算邮政编码之间的距离 然后我希望能够在谷歌地图上绘制每所学校的所有孩子 并看看住在
  • 从 R 文本中提取网站链接

    我有多个文本 每个文本都可能包含对一个或多个网络链接的引用 例如 text1 s 1212a as www abcd com asasa11 我如何提取 www abcd com 来自 R 中的这段文字 换句话说 我希望提取以www并结束于
  • 匹配字符串在多列上循环

    我有来自一项开放式调查的数据 我有一个注释表和一个代码表 代码表是一组主题或字符串 我正在尝试做的事情 检查代码表中相关列中是否存在开放式注释中的单词 字符串 在评论表中为特定主题添加一个新列 并添加一个二进制 1 或 0 来表示已标记哪些
  • 将一个数据框中的行(带有行名称)与另一个数据框中的匹配列名称相乘

    我有两个数据框 df1 lt data frame Values c 0 01 0 05 row names c X Y df1 Values X 0 01 Y 0 05 df2 lt data frame c 0 1 1 c 1 0 0
  • 是否可以旋转 R 中的绘图(基本图形)?

    我搜索了这个 发现使用 grid 有多种方法可以旋转图像 并且对于某些绘图 您可以使用它们的旋转 例如plot x y 而不是plot y x 不过我想知道是否有R 中旋转绘图的通用方法 适用于基础图形中生成的任何绘图 您可以导出图形 将其
  • 如何在 R 中使用别名运行系统可执行文件?

    假设我正在 R 中运行系统命令来运行executable inputfile lt path myfile txt 我该如何更换 path myfile txt在下面的命令中inputfile如下面命令所示 system executabl
  • 聚合时间

    我的数据包含 1 分钟测量值 我希望将其聚合为 5 分钟和 10 分钟 如何在 10 分钟内将 日 列的数据分组为 5 样本数据2 structure list Day c Monday Monday Monday Monday Monda
  • 使用 != 子集 data.table 也排除 NA

    我有一个 data table 其中有一列NAs 我想删除该列具有特定值的行 恰好是 然而 我的第一次尝试导致我失去了行NA还有 gt a c 1 NA gt x lt data table a x a 1 1 2 3 NA gt y lt
  • mutate() 尝试在使用美元符号运算符时使用全局变量的值进行提取

    我使用得到了有趣的结果mutate with a 当全局环境中碰巧存在与要提取的元素同名的变量时进行提取 我正在运行 R 3 1 3 和 dplyr 0 4 3 9 这工作正常 library dplyr df lt data frame
  • 获取非零数据的列意味着

    R 可以获得数据帧非零值的 colMeans 吗 data lt data frame col1 c 1 0 1 0 3 3 col2 c 5 0 5 0 7 7 colMeans data 1 33 4 我想要这样的东西 mean dat
  • 在 R 中根据时间序列数据制作 3D 曲面

    我有一个大型数据集 我想从中制作 3D 表面 我希望 x 轴为日期 y 轴为时间 24 小时 z 轴 高度 为我的值 我是 R 初学者 所以越简单越好 http www quantmod com examples chartSeries3d
  • 成对散点图;一对多[重复]

    这个问题在这里已经有答案了 有没有一种简洁的方法来创建pairs仅将一个变量与许多其他变量进行比较的图 换句话说 我可以只绘制标准的一行或一列吗 pairs不使用循环的散点图矩阵 融化你的数据 然后使用带有facet的ggplot libr
  • 使用 by 参数连接 data.table

    我有两个数据表dx and dy dx lt data table a c 1 1 1 1 2 2 b 3 8 dy lt data table a c 1 1 2 c 7 9 我要参与dy到每一行dx 下面是所需的输出 data tabl
  • 仅当 ggplot 中 y 轴的下限设置为 0 时才会出现图条[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个条形图 当我将限制设置为 0 7 时 就会出现条形 但是 我希望下限为 1 而不是 0 当我将下限设置为 1 时 条形图不会出现 我收到以下错误消息 Removed 8 rows contain
  • 有什么方法可以访问 makeActiveBinding 安装的函数吗?

    标题基本上说明了一切 如果我这样做 makeActiveBinding x function runif 2 GlobalEnv x 1 0 7332872 0 4707796 x 1 0 5500310 0 5013099 那我有什么办法
  • 直接来自数据的马尔可夫模型图(makovchain 或 deemod 包?)

    我想读取一堆因子数据并从中创建一个可以很好地可视化的转换矩阵 我发现了一个非常好的软件包 称为 heemod 它与 diagram 一起工作得不错 对于我的第一个快速而肮脏的方法 我运行了一段 Python 代码来获取矩阵 然后使用这个 R
  • 是否有 R 函数可以将这些数据从长形重塑为宽形?

    数据现在看起来如何 Coach ID Student score 1 A 8 1 B 3 2 A 5 2 B 4 2 C 7 看起来像这样 Coach ID Student score student 2 score 2 student 3
  • dplyr::mutate 添加多个值

    网上有几个与此相关的问题dplyr Github 存储库 https github com hadley dplyr已经 并且至少有一个相关的问题 但没有一个问题完全涵盖了我的问题 我认为 在 dplyr mutate 调用中添加多列 ht

随机推荐

  • 正则表达式匹配没有 标签的链接

    http s a zA Z0 9 a zA Z0 9 a zA Z 2 5 1 2 a zA Z0 9 a zA Z 2 5 0 2 这是我的正则表达式 它可以很好地匹配字符串中的链接 但我不希望它选择每个链接 如果链接有 gt 在它之前
  • Midnight Commander:如何启用“键入时过滤”行为

    基本上是在寻找类似于 Total Commander 的 键入时过滤 功能 快速搜索不符合您的需求吗 如果我没记错的话 alt s 会在 Midnight Commander 中显示 快速搜索 但现在无法检查
  • 反应原生scrollView高度始终保持静态并且不会改变

    我构建了 React Native 应用程序 并与带有水平文本列表的标题的滚动视图一起使用 问题是滚动视图的高度占据了屏幕大小的一半 即使在宣布它为一种风格之后 它仍然保持原样 带有scrollView的屏幕
  • 是否可以在不触发重组的情况下更改图像可组合项的大小

    我有一个animateDpAsState 每当这个动画被触发时 它就会改变Modifier size value of an Image 从而导致重组 对于这种特定场景 有没有办法跳过组合阶段 允许图像改变其大小 我找到了解决方案 要跳过重
  • 将 JavaFX 图像转换为 BufferedImage

    我正在尝试转换JavaFX图片 来自ImageView to an BufferedImage 我尝试了选角之类的东西 但没有任何作用 有人可以建议我应该怎么做吗 试试你的运气SwingFX实用工具 http docs oracle com
  • 如何在asp.net网站中允许使用撇号

    在我的 asp net 网站中 我创建用户及其详细信息 如果假设用户的姓氏是Sam s然后当我编辑用户时 文本框中的显示是Sam 39 s但在数据库中 它存储为 Sam 的 当我尝试将名称更新为 Sam 时 我收到以下错误 我应该如何在文本
  • Grails 2.5:“dbm-gorm-diff”不断生成相同的更改

    首先 我们删除了数据库 然后运行我们的应用程序dbCreate update 打造良好的工作基地 然后我们跑 grails dbm generate changelog baseline xml 创建脚本来生成我们的架构 我们删除了dbCr
  • Scala 中的 @Inject 如何工作

    我想知道 Play Scala 中的 Inject 注释如何工作 它显然注入了依赖项 但我很好奇它是如何工作的 当我在类扩展控制器上使用它并将路由生成器设置为injectroutesgenerator时 它似乎自动从这些类创建对象 但是我如
  • Google Chrome 开发者工具运行速度非常慢

    自从 Google Chrome 更新到 50 x 版本后 就无法使用 DevTools 了 此问题主要出现在 网络 选项卡中 每次点击 请求 大约需要30 40秒 之后 chrome 可能会崩溃 尝试删除所有扩展 清除缓存并重新安装 但没
  • 为什么在 XAML 中绑定 MainWindow 数据上下文的行为与在代码隐藏中使用 this.datacontext=this 绑定的行为不同?

    当我了解 WPF 等内容时 我尝试使用数据绑定将 ObservableCollection 绑定到 DataGrid 的 ItemsSource 在后面的代码中我可以设置 DataContextthis DataContext this o
  • Java 有没有办法重新初始化静态类?

    我正在尝试对引用另一个类的静态数据的类进行单元测试 我不能 不 使用这个静态类 但显然运行多个测试已经成为问题 所以我的问题是这样的 junit 测试中有没有办法重新初始化静态类 这样一来 一次测试就不会受到前一次测试的影响 换句话说 有一
  • 谷歌地图 v3 FontAwesome5

    我正在尝试创建一个使用动态字体 Awesome 标记的谷歌地图 不过 我似乎无法将 Font Awesome 5 Free 设置为要使用的字体 我可以设置 Fontawsome 它可以工作 但不是网络字体 它是安装在我的系统中的 TTF v
  • NestJS 自定义装饰器返回未定义

    早上好 我正在尝试创建一个自定义装饰器 user decorator ts import createParamDecorator ExecutionContext from nestjs common export const User
  • 将动态行转换为固定列

    我需要将动态行数转换为固定列数 怎么做 这是我想做的 A1 B1 C1 A2 B2 C3 B3 转换成 A1 A2 B1 B2 B3 C1 C3 空格由破折号 表示 空白转置在 Excel 2010 中工作正常 如果您在早期版本中遇到转置问
  • 符号表有限制吗?

    我一直在研究一些加载 python osx 上的 2 7 文件作为配置文件的极端情况 我想看看如果我循环运行 execfile 会发生什么行为 我预计会发生内存不足错误或大量交换 但当我得到不同的结果时 我感到非常惊讶 我设置了一个测试场景
  • 在一段时间内不活动后,如何使用户会话过期?

    我正在开发一个无服务器 Reactjs 项目 并使用 AWS amplify 来管理我的用户 我在测试中注意到 如果我以用户身份登录 第二天当我访问该网站时仍然会登录 我阅读了 Amplify 的文档 该库会自动刷新令牌 并且想知道是否可以
  • 为什么 java.lang.Throwable 是一个类?

    在java中以 able结尾的形容词是接口Serializable Comparable等等 那为什么是Throwable一类 如果这样的话 异常处理不是会更容易吗Throwable是一个接口吗 编辑 例如 异常类不需要扩展 Excepti
  • 带有类名的最后一个子选择器?

    有人可以解释为什么当我使用类名选择器时 last child 不起作用吗 这是不允许的吗 http jsfiddle net T2PgX 2 http jsfiddle net T2PgX 2 这是因为 last child您的列表中不是
  • 选项指令禁止的目录索引

    我正在使用 codeigniter 的 dompdf 插件 http codeigniter com wiki PDF Generation using dompdf http codeigniter com wiki PDF genera
  • 如何为形状添加阴影

    是否可以使用ggrough https xvrdm github io ggrough index html https xvrdm github io ggrough index html 对创建的形状进行着色geom sf 首选 或可能