ggplot2 и создание бейджей для события - PullRequest
1 голос
/ 19 июня 2019

Я организую научную конференцию, и я застрял с простой проблемой.Во время конференции будет около 300 участников, и нам нужно создать бейдж для всех.Имя должно быть 50 × 85 мм .Вопрос в том, как огранить шаблон значка ggplot, сохраняя разрешение исходного графика?

Например, это кадр данных имен участников:

names <- tibble(name = c("Jared Harris", "Stellan Skarsgеrd", "Paul Ritter",
                     "Jessie Buckley", "Adam Nagaitis", "Con O'Neill",
                     "Adrian Rawlins", "Sam Troughton", "Robert Emms",
                     "Emily Watson", "David Dencik", "Mark Lewis Jones",
                     "Alan Williams", "Alex Ferns", "Ralph Ineson",
                     "Barry Keoghan","Fares Fares", "Michael McElhatton"))

Я создал шаблон значкаи добавьте в него несколько логотипов конференции:

library(tidyverse)
library(stringr)
library(grid)
library(magick)

# Donwload some sample logos
logo1 <- image_read("https://www.stickpng.com/assets/images/5cb58699cba3dd2a29200cb6.png")
logo2 <- image_read("https://www.stickpng.com/assets/images/5cb58635cba3dd2a29200caa.png")

# Create ggplot object
ggplot(data = names) +
  # Add participant's names
  geom_text(aes(label = str_wrap(string = str_to_upper(name),
                                 width = 15)),
            fontface = 2,
            x = 2.5, y = 1) +
  # Add conference name
  annotate("text", x = 2.5, y = 4,
           label = "3-6 september, 2019\nCity,\nName of the Conference") +
  # Add plot limits
  xlim(c(0, 5)) + ylim(c(0,8.5)) +
  # Specify theme
  theme_void() %+replace%
  theme(panel.border = element_rect(fill = NA, 
                                    colour = "grey60"),
        strip.text = element_blank()) -> p

# Add conference logos
p + annotation_custom(rasterGrob(logo1, interpolate=TRUE), 
                      xmin=3, xmax=5, ymin=6, ymax=8) +
  annotation_custom(rasterGrob(logo2, interpolate=TRUE), 
                    xmin=0, xmax=2, ymin=6, ymax=8) -> p

Потому что мне нужно распечатать его, я сохранил его с функцией pdf по умолчанию и удивительным ggplus.

# Install ggplus
devtools::install_github("guiastrennec/ggplus")

pdf("badges/badges.pdf", paper = "a4", width = 31.35, height = 40.52)
ggplus::facet_multiple(plot = p, facets = "name", ncol = 3, nrow = 3) +
  annotation_custom(rasterGrob(msu, interpolate=TRUE), 
                    xmin=3, xmax=5, ymin=6, ymax=8) +
  annotation_custom(rasterGrob(mnks, interpolate=TRUE), 
                    xmin=0, xmax=2, ymin=6, ymax=8)
dev.off()

Результат выглядит следующим образом: enter image description here

Aa, и здесь мы сталкиваемся с первой проблемой - размером каждого значка 64,5 × 89,1 мм, не требуется 50 × 85 мм.Как это исправить?

Во-вторых , я живу в России и мне нужно делать значки на русском языке.Поэтому, если я изменю names фрейм данных на тот, который содержит буквы кириллицы, например:

names <- structure(list(name = c(
  "Айбулатов Денис Николаевич",
  "Александрин М.Ю.",
  "Александровский Алексей Юрьевич",
  "Андреев П.В.",
  "Антоненко М.В.",
  "Атутова Жанна Владимировна",
  "Бабич Дмитрий Борисович",
  "Баженова Ольга Иннокентьевна",
  "Бажин К.И.",
  "Барабанов Анатолий Тимофеевич")),
  row.names = c(NA,-10L),
  class = c("tbl_df", "tbl", "data.frame")) 

Все строки с буквами кириллицы сдвигаются на пару дюймов вправо.И вопрос - что за хрень?

enter image description here

Я использую Windows-машину, и моя информация о сеансе:

R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=Russian_Russia.1251  LC_CTYPE=Russian_Russia.1251   
[3] LC_MONETARY=Russian_Russia.1251 LC_NUMERIC=C                   
[5] LC_TIME=Russian_Russia.1251    

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

other attached packages:
 [1] magick_2.0      png_0.1-7       cowplot_0.9.4   extrafont_0.17 
 [5] forcats_0.3.0   stringr_1.4.0   dplyr_0.8.1     purrr_0.3.1    
 [9] readr_1.3.1     tidyr_0.8.3     tibble_2.1.3    ggplot2_3.2.0  
[13] tidyverse_1.2.1

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.1       cellranger_1.1.0 pillar_1.3.1    
 [4] compiler_3.5.1   tools_3.5.1      jsonlite_1.5    
 [7] lubridate_1.7.4  gtable_0.2.0     nlme_3.1-137    
[10] lattice_0.20-35  pkgconfig_2.0.2  rlang_0.3.4     
[13] cli_1.1.0        rstudioapi_0.8   curl_3.2        
[16] haven_2.1.0      Rttf2pt1_1.3.7   withr_2.1.2     
[19] xml2_1.2.0       httr_1.3.1       ggplus_0.1      
[22] generics_0.0.2   hms_0.4.2        tidyselect_0.2.5
[25] glue_1.3.1       R6_2.4.0         readxl_1.3.1    
[28] extrafontdb_1.0  modelr_0.1.2     magrittr_1.5    
[31] backports_1.1.3  scales_1.0.0     rvest_0.3.3     
[34] assertthat_0.2.1 colorspace_1.4-0 labeling_0.3    
[37] stringi_1.2.4    lazyeval_0.2.1   munsell_0.5.0   
[40] broom_0.5.1      crayon_1.3.4
...