1

一段时间以来,我一直在使用 Claus Wilke 出色的 ggtext 包进行降价注释,直到现在它运行良好。在使用 ggtext 制作多个文本注释(在多行上混合粗体和常规文本)的过程中,无论是使用 ggtext::geom_richtext() 还是 ggtext::geom_textbox(),我发现我使用的 geom_richtext() 越多添加了将渲染时间增加到它会不断搅动的程度(我上次在 45 分钟后放弃了)。

当然,使用所有 geom_richtext() 和 element_markdown() 创建和保存 ggplot 对象花费的时间很少。但是当我试图查看情节或使用 ggsave 保存为 png/jpeg 时,它再次永远搅动(再次,我在 30 分钟后放弃了)。

我在下面包含了一个示例reprex。

我对 ggtext 和 ggplot2 高级用户的问题:

  1. 您可以在 ggplot2 图中使用的 ggtext 对象的数量是否有上限?我不精通网格和 ggplot 的基本机制。
  2. 是否有 ggtext 的替代方法可以在 ggplot2 的注释中混合字体粗细?在从@aosmith 在 SO 上看到这个之后,我已经尝试了 plotmath 路线:html - 通过 geom_text() 传递的对象的加粗子字符串 - 代码日志。问题?atop() 仅适用于一行,而不适用于多行文本。

FWIW,我的代码的完整非代表版本(以及我试图在 ggplot2 中重新创建的即)位于https://github.com/kpivert/wsj/tree/main/01_R/06_cpi_again

您可能有任何建议将不胜感激。

请让我知道您是否需要进一步澄清或如果 reprex 不起作用。

感谢您的时间和考虑。

库尔蒂斯

require(ggthemes)
#> Loading required package: ggthemes
require(ggtext)
#> Loading required package: ggtext
require(tictoc)
#> Loading required package: tictoc
require(tidyverse)
#> Loading required package: tidyverse

df <- data.frame(
  DATE = seq(as.Date("1913-01-01"), as.Date("2020-12-01"), "month")
  ) %>% 
  mutate(
    var = rnorm(n = nrow(.), mean = 0, sd = 0.5)
  )

# Years for X Axis Labels

yr_labs <- seq(as.Date("1915-01-01"), as.Date("2020-01-01"), by = "5 years") %>% 
  str_sub(start = 1, end = 4) 

yr_labs <- case_when(
  yr_labs == "1915" ~ "1915",
  yr_labs == "2020" ~ "2020",
  TRUE ~ str_c("'", str_sub(yr_labs, 3, 4))
)

tic()
ggplot(
  df, 
  aes(
    x = DATE,
    y = var
    )
  ) +
  geom_line(
    lwd = 0.2,
    color = "blue"
  ) +
  scale_x_continuous(
    breaks = seq(as.Date("1915-01-01"), as.Date("2020-01-01"), by = "5 years"), 
    labels = yr_labs
  ) +
  theme_tufte() +
  theme(
    panel.grid.major.y = element_line(size = .1),
    axis.ticks.y = element_blank(),
    axis.text.y = element_text(
      vjust = - 0.8, 
      margin = margin(l = 20, r = -20)
    ),
    plot.title = element_text(size = 16),
    plot.subtitle = element_text(size = 10),
    plot.caption = element_text(hjust = 0)
  ) +
  labs(
    x = "", 
    y = "",
    caption = "Source: Randomness",
    title = "Reprex Title",
    subtitle = "Reprex Subtitle"
  ) +
  # Annotations ----
# 1. WW I ----
geom_segment(
  aes(
    x = as.Date("1914-09-01"), 
    y = 1.25,
    xend = as.Date("1918-11-01"),
    yend = 1.25
  ),
  lwd = 1
) +
  geom_segment(
    aes(
      x = as.Date("1916-08-01"), 
      y = 1.25,
      xend = as.Date("1916-08-01"),
      yend = 1.28
    ),
    linetype = "dotted"
  ) +
geom_richtext(
  x = as.Date("1916-01-01"),
  y = 1.28,
  label = "<b>1914-18</b><br>World<br>War I",
  fill = NA,
  label.color = NA
) 
toc()
#> 20.668 sec elapsed

reprex 包于 2021-12-07 创建(v2.0.1)

会话信息
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value                       
#>  version  R version 4.1.0 (2021-05-18)
#>  os       macOS Big Sur 10.16         
#>  system   x86_64, darwin17.0          
#>  ui       X11                         
#>  language (EN)                        
#>  collate  en_US.UTF-8                 
#>  ctype    en_US.UTF-8                 
#>  tz       America/New_York            
#>  date     2021-12-07                  
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package     * version date       lib source        
#>  assertthat    0.2.1   2019-03-21 [1] CRAN (R 4.1.0)
#>  backports     1.2.1   2020-12-09 [1] CRAN (R 4.1.0)
#>  broom         0.7.9   2021-07-27 [1] CRAN (R 4.1.0)
#>  cellranger    1.1.0   2016-07-27 [1] CRAN (R 4.1.0)
#>  cli           3.0.1   2021-07-17 [1] CRAN (R 4.1.0)
#>  colorspace    2.0-2   2021-06-24 [1] CRAN (R 4.1.0)
#>  crayon        1.4.1   2021-02-08 [1] CRAN (R 4.1.0)
#>  curl          4.3.2   2021-06-23 [1] CRAN (R 4.1.0)
#>  DBI           1.1.1   2021-01-15 [1] CRAN (R 4.1.0)
#>  dbplyr        2.1.1   2021-04-06 [1] CRAN (R 4.1.0)
#>  digest        0.6.28  2021-09-23 [1] CRAN (R 4.1.0)
#>  dplyr       * 1.0.7   2021-06-18 [1] CRAN (R 4.1.0)
#>  ellipsis      0.3.2   2021-04-29 [1] CRAN (R 4.1.0)
#>  evaluate      0.14    2019-05-28 [1] CRAN (R 4.1.0)
#>  fansi         0.5.0   2021-05-25 [1] CRAN (R 4.1.0)
#>  farver        2.1.0   2021-02-28 [1] CRAN (R 4.1.0)
#>  fastmap       1.1.0   2021-01-25 [1] CRAN (R 4.1.0)
#>  forcats     * 0.5.1   2021-01-27 [1] CRAN (R 4.1.0)
#>  fs            1.5.0   2020-07-31 [1] CRAN (R 4.1.0)
#>  generics      0.1.0   2020-10-31 [1] CRAN (R 4.1.0)
#>  ggplot2     * 3.3.5   2021-06-25 [1] CRAN (R 4.1.0)
#>  ggtext      * 0.1.1   2020-12-17 [1] CRAN (R 4.1.0)
#>  ggthemes    * 4.2.4   2021-01-20 [1] CRAN (R 4.1.0)
#>  glue          1.4.2   2020-08-27 [1] CRAN (R 4.1.0)
#>  gridtext      0.1.4   2020-12-10 [1] CRAN (R 4.1.0)
#>  gtable        0.3.0   2019-03-25 [1] CRAN (R 4.1.0)
#>  haven         2.4.3   2021-08-04 [1] CRAN (R 4.1.0)
#>  highr         0.9     2021-04-16 [1] CRAN (R 4.1.0)
#>  hms           1.1.0   2021-05-17 [1] CRAN (R 4.1.0)
#>  htmltools     0.5.2   2021-08-25 [1] CRAN (R 4.1.0)
#>  httr          1.4.2   2020-07-20 [1] CRAN (R 4.1.0)
#>  jsonlite      1.7.2   2020-12-09 [1] CRAN (R 4.1.0)
#>  knitr         1.36    2021-09-29 [1] CRAN (R 4.1.0)
#>  labeling      0.4.2   2020-10-20 [1] CRAN (R 4.1.0)
#>  lifecycle     1.0.1   2021-09-24 [1] CRAN (R 4.1.0)
#>  lubridate     1.7.10  2021-02-26 [1] CRAN (R 4.1.0)
#>  magrittr      2.0.1   2020-11-17 [1] CRAN (R 4.1.0)
#>  markdown      1.1     2019-08-07 [1] CRAN (R 4.1.0)
#>  mime          0.12    2021-09-28 [1] CRAN (R 4.1.0)
#>  modelr        0.1.8   2020-05-19 [1] CRAN (R 4.1.0)
#>  munsell       0.5.0   2018-06-12 [1] CRAN (R 4.1.0)
#>  pillar        1.6.3   2021-09-26 [1] CRAN (R 4.1.0)
#>  pkgconfig     2.0.3   2019-09-22 [1] CRAN (R 4.1.0)
#>  purrr       * 0.3.4   2020-04-17 [1] CRAN (R 4.1.0)
#>  R6            2.5.1   2021-08-19 [1] CRAN (R 4.1.0)
#>  Rcpp          1.0.7   2021-07-07 [1] CRAN (R 4.1.0)
#>  readr       * 2.0.1   2021-08-10 [1] CRAN (R 4.1.0)
#>  readxl        1.3.1   2019-03-13 [1] CRAN (R 4.1.0)
#>  reprex        2.0.1   2021-08-05 [1] CRAN (R 4.1.0)
#>  rlang         0.4.11  2021-04-30 [1] CRAN (R 4.1.0)
#>  rmarkdown     2.11    2021-09-14 [1] CRAN (R 4.1.0)
#>  rstudioapi    0.13    2020-11-12 [1] CRAN (R 4.1.0)
#>  rvest         1.0.1   2021-07-26 [1] CRAN (R 4.1.0)
#>  scales        1.1.1   2020-05-11 [1] CRAN (R 4.1.0)
#>  sessioninfo   1.1.1   2018-11-05 [1] CRAN (R 4.1.0)
#>  stringi       1.7.5   2021-10-04 [1] CRAN (R 4.1.0)
#>  stringr     * 1.4.0   2019-02-10 [1] CRAN (R 4.1.0)
#>  styler        1.5.1   2021-07-13 [1] CRAN (R 4.1.0)
#>  tibble      * 3.1.5   2021-09-30 [1] CRAN (R 4.1.0)
#>  tictoc      * 1.0.1   2021-04-19 [1] CRAN (R 4.1.0)
#>  tidyr       * 1.1.3   2021-03-03 [1] CRAN (R 4.1.0)
#>  tidyselect    1.1.1   2021-04-30 [1] CRAN (R 4.1.0)
#>  tidyverse   * 1.3.1   2021-04-15 [1] CRAN (R 4.1.0)
#>  tzdb          0.1.2   2021-07-20 [1] CRAN (R 4.1.0)
#>  utf8          1.2.2   2021-07-24 [1] CRAN (R 4.1.0)
#>  vctrs         0.3.8   2021-04-29 [1] CRAN (R 4.1.0)
#>  withr         2.4.2   2021-04-18 [1] CRAN (R 4.1.0)
#>  xfun          0.26    2021-09-14 [1] CRAN (R 4.1.0)
#>  xml2          1.3.2   2020-04-23 [1] CRAN (R 4.1.0)
#>  yaml          2.2.1   2020-02-01 [1] CRAN (R 4.1.0)
#> 
#> [1] /Library/Frameworks/R.framework/Versions/4.1/Resources/library
4

1 回答 1

0

作为记录,Jon Spring正确地指出了这个问题,即geom_segment()andgeom_richtext()调用中的美学映射问题。除了使用他的解决方案之外annotate(),您还可以传递一个数据框并使用inherit.aes = FALSE,这样文本或段的重叠次数就不会与数据集中的行数相同。例如:

 geom_richtext(
    inherit.aes = FALSE,
    data = tibble(
    x = as.Date("1916-01-01"),
    y = 1.28,
    label = "<b>1914-18</b><br>World<br>War I"),
    aes(
      x = x,
      y = y,
      label = label),
    fill = NA,
    label.color = NA
  )

Kara Woo 在 2021 年 rstudio::global 会议上的精彩演讲解决了这个问题:https ://www.rstudio.com/resources/rstudioglobal-2021/always-look-on-the-bright-side-of-plots/ 。

于 2022-01-30T19:03:18.667 回答