-
Notifications
You must be signed in to change notification settings - Fork 84
Description
I am trying to export PDF files for plots produced by cowplot that include complex labels created with ggtext. There is a text rendering issue (squeezed spaces between words) when using cowplot with a Linux HPC. The same script works nicely on Windows.
Here is a reprex small example
library(cowplot)
library(magritr)
library(ggplot2)
library(ggtext)
# Example list of plots, each uses `ggtext::element_markdown` in the title
plot_example <- ggplot2::ggplot() +
ggplot2::geom_point(aes(x = 1, y = 1)) +
ggplot2::labs(title = "Some text --- Some text") +
ggplot2::theme_minimal() +
ggplot2::theme(
text = ggplot2::element_text(family = "sans"),
plot.title = ggtext::element_markdown(face = "bold", size = 20, hjust = 0.5))
# text rendering is as expected under Windows and Linux
grDevices::cairo_pdf(filename = "pdf_2.pdf", width = 18, height = 8, onefile = TRUE)
plot(plot_example)
# grid::grid.draw(plot_list2)
grDevices::dev.off()
When arranging multiple plots using cowplot::plot_grid and adding a common title to them, I have issues with rendering titles created with ggtext. Both the common title and each plot title have issues rendering spaces. I tried to use cowplot::set_null_device("pdf") and cowplot::set_null_device(cowplot::cairo_null_device) with no difference. Adding more spaces (including HTML space symbols) to the text did not help.
# A common title plot that uses `ggtext::element_markdown`
PlotTitle <- ggplot2::ggplot() +
ggplot2::labs(title = "Some text --- Some text") +
ggplot2::theme_minimal() +
ggplot2::theme(
# This is to maintain the same font irrespective of the operating system
text = ggplot2::element_text(family = "sans"),
plot.title = ggtext::element_markdown(face = "bold", size = 20, hjust = 0.5))
plot_list <- list(plot_example, plot_example, plot_example)
plot_list2 <- cowplot::plot_grid(
plotlist = plot_list, ncol = 3, nrow = 1, align = "hv") %>%
cowplot::plot_grid(PlotTitle, ., ncol = 1, rel_heights = c(0.05, 1))
# cowplot::set_null_device("pdf")
cowplot::set_null_device(cowplot::cairo_null_device)
grDevices::cairo_pdf(filename = "pdf_1.pdf", width = 18, height = 8, onefile = TRUE)
plot(plot_list2)
# grid::grid.draw(plot_list2)
grDevices::dev.off()
Is it possible to get correctly rendered ggtext labels while still using cairo_pdf()? Is it possible to add a theme information to the plots (e.g., to include text = ggplot2::element_text(family = "sans"))?
In my current project, I tried pdf() and ggsave() and had some issues, and I switched to use cairo_pdf().
Thanks in advance.
sessionInfo()
R version 4.4.1 (2024-06-14)
Platform: x86_64-pc-linux-gnu
Running under: SUSE Linux Enterprise Server 15 SP5
Matrix products: default
BLAS/LAPACK: /opt/cray/pe/libsci/24.03.0/GNU/12.3/x86_64/lib/libsci_gnu_mp.so.6.0; LAPACK version 3.10.1
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
time zone: Europe/Berlin
tzcode source: system (glibc)
attached base packages:
[1] stats graphics grDevices datasets utils methods base
other attached packages:
[1] magrittr_2.0.3 ggtext_0.1.2 ggplot2_3.5.2
loaded via a namespace (and not attached):
[1] vctrs_0.6.5 cli_3.6.5 xfun_0.52
[4] rlang_1.1.6 stringi_1.8.7 cowplot_1.1.3
[7] renv_1.1.4 generics_0.1.4 litedown_0.7
[10] glue_1.8.0 labeling_0.4.3 markdown_2.0
[13] gridtext_0.1.5 scales_1.4.0 grid_4.4.1
[16] tibble_3.2.1 lifecycle_1.0.4 stringr_1.5.1
[19] BiocManager_1.30.25 compiler_4.4.1 dplyr_1.1.4
[22] RColorBrewer_1.1-3 Rcpp_1.0.14 pkgconfig_2.0.3
[25] farver_2.1.2 R6_2.6.1 dichromat_2.0-0.1
[28] tidyselect_1.2.1 pillar_1.10.2 commonmark_1.9.5
[31] tools_4.4.1 withr_3.0.2 gtable_0.3.6
[34] xml2_1.3.8

