gpt4 book ai didi

r - 无法复制此 ggplot2 图

转载 作者:行者123 更新时间:2023-12-03 13:45:23 25 4
gpt4 key购买 nike

我无法从 ggrough 复制示例库 ( https://xvrdm.github.io/ggrough/articles/Customize%20chart.html )。特别是,我试图复制以下情节(减去字体方面):
enter image description here
代码来自上面“幼儿园”标题下的相同链接。
我正在使用以下代码:

library(hrbrthemes)
library(tidyverse)
library(gcookbook)
library(ggplot2)
library(ggrough)
ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) +
geom_area(alpha=0.8) +
scale_fill_ipsum() +
scale_x_continuous(expand=c(0,0)) +
scale_y_comma() -> p

options <- list(GeomArea=list(fill_style="hachure",
angle_noise=0.5,
gap_noise=0.2,
gap=1.5,
fill_weight=1))
get_rough_chart(p, options)
但是,我无法复制上述内容。这是我得到的:
enter image description here
同样,我不担心字体,但确实想让阴影 geom_area 工作。它目前根本不渲染。作为引用,这里是 p对象产量(即,经过 ggrough 处理之前的图):
enter image description here
另请注意,我可以复制使用 geom_col 的“蓝图”示例。 .所以看来 ggrough 出了点问题处理 geom_area ,但不确定。

最佳答案

ggrough 包不适用于当前版本的 ggplot2 geom_area ,因为它在带有名称“折线”的 xml 节点中查找目标区域。在旧版本的 ggplot2 中,这可能工作得很好,因为每个区域都被多段线包围。但是,在最近的版本中,情况不再如此(请参阅 breaking changes under 3.3.0 )。
看看以下是否适合您:

  • 定义 parse_* 的版本寻找“多边形”而不是“折线”的函数。
  • 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"))
    }
    }
  • 将ggrough中对应的未导出函数改为使用新定义的parse_polygons用于 GeomArea 图层。

  • 此外,我添加了 GeomRibbon(它似乎从原始版本中丢失,但实际上是 GeomArea 的更一般情况)并将 GeomViolin 从 parse_areas 移过来至 parse_polygons ,因为它面临同样的问题。
    (注意:GeomSmooth 也可能会崩溃,但我认为与 GeomRibbon/GeomViolin 相比,它的解析函数需要更多的调整,而且我没有看到它的用例......)
    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))
    }
    测试:
    library(ggplot2)
    library(ggrough)

    uspopage <- gcookbook::uspopage
    p <- ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) +
    geom_area(alpha=0.8) +
    scale_x_continuous(expand=c(0,0)); p
    options <- list(GeomArea=list(fill_style="hachure",
    angle_noise=0.5,
    gap_noise=0.2,
    gap=1.5,
    fill_weight=1))
    get_rough_chart(p, options)
    geom_area plot geom_ribbon 的附加测试:
    # using example from geom_ribbon help page
    pp <- data.frame(year = 1875:1972, level = as.vector(LakeHuron)) %>%
    ggplot(aes(year)) +
    geom_ribbon(aes(ymin = level - 1, ymax = level + 1),
    fill = "grey70")
    options <- list(GeomRibbon=list(fill_style="hachure",
    angle_noise=0.5,
    gap_noise=0.2,
    gap=1.5,
    fill_weight=1))
    get_rough_chart(pp, options)
    geom_ribbon plot
    session 信息:
    R version 4.0.1 (2020-06-06)
    Platform: x86_64-w64-mingw32/x64 (64-bit)
    Running under: Windows 10 x64 (build 15063)

    Matrix products: default

    locale:
    [1] LC_COLLATE=English_Singapore.1252 LC_CTYPE=English_Singapore.1252
    [3] LC_MONETARY=English_Singapore.1252 LC_NUMERIC=C
    [5] LC_TIME=English_Singapore.1252

    attached base packages:
    [1] stats graphics grDevices utils datasets methods base

    other attached packages:
    [1] gdtools_0.2.2 dplyr_1.0.0 ggrough_0.1.0 ggplot2_3.3.2

    loaded via a namespace (and not attached):
    [1] Rcpp_1.0.5 cpp11_0.2.1 pillar_1.4.6 compiler_4.0.1
    [5] plyr_1.8.6 Rmisc_1.5 forcats_0.5.0 tools_4.0.1
    [9] boot_1.3-25 digest_0.6.25 jsonlite_1.7.1 lifecycle_0.2.0
    [13] tibble_3.0.3 gtable_0.3.0 lattice_0.20-41 pkgconfig_2.0.3
    [17] rlang_0.4.7 rstudioapi_0.11 yaml_2.2.1 xml2_1.3.2
    [21] withr_2.2.0 stringr_1.4.0 htmlwidgets_1.5.1 systemfonts_0.3.1
    [25] generics_0.0.2 vctrs_0.3.4 grid_4.0.1 tidyselect_1.1.0
    [29] data.table_1.12.8 svglite_1.2.3.2 glue_1.4.2 R6_2.4.1
    [33] gcookbook_2.0 tidyr_1.1.0 reshape2_1.4.4 purrr_0.3.4
    [37] farver_2.0.3 magrittr_1.5 htmltools_0.5.0 scales_1.1.1
    [41] ellipsis_0.3.1 fortunes_1.5-4 colorspace_1.4-1 labeling_0.3
    [45] stringi_1.5.3 munsell_0.5.0 crayon_1.3.4

    关于r - 无法复制此 ggplot2 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63759571/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com