Символ лямбда (λ) не отображается при экспорте изображения в формате PDF в R?

Я создал рисунок в R, используя ggplot2, и с помощью аннотации я включил в текст символ лямбда (λ). Однако, когда я делаю «Экспорт»> «Сохранить как PDF», изображение PDF не показывает лямбда, а вместо этого просто показывает «..». Я прикрепил пример того, как это выглядит ниже:

enter image description here

Это код, который я использовал:

dna.b.bae.coi <- data.frame(hours=c(1,2,24,48,96,168,672), copies=c(39,46,13,1,0,0,0))
nlsLM(copies ~ a*exp(b*hours), data=dna.b.bae.coi, start=list(a=39,b=-0.16507))
nlsplot(dna.b.bae.coi, model=6, start=c(a=45.97176,b=-0.05464))
a1<- ggplot(dna.b.bae.coi, aes(x=hours, y=copies)) + geom_point() + stat_smooth(method = 'nls', method.args = list(start = c(a=45.97176,b=-0.05464)), formula = y~a*exp(b*x), se=FALSE, linetype=2, colour="yellow") + theme_classic() + xlab("") + ylab("") + 
  annotate("text", x = 300, y = 46, label = "COI eDNA\nλ = -0.0546", color = "black", hjust = 0, vjust = 1) +
  ggtitle(expression(~italic("Baetidae")))
a1

Я не уверен, почему это происходит. Есть ли способ обойти это, чтобы λ действительно отображался на моем рисунке при сохранении в формате PDF?

Заранее спасибо!

попробуйте вариант cairo pdf

rawr 23.04.2022 01:12

Я пробовал это, но, похоже, это не работает. У меня все еще та же проблема, даже когда я устанавливаю dev="cairo_pdf"

ramateur 23.04.2022 02:27
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
2
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это работает с ggsave:

> p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + annotate("text", x = 300, y = 46, label = "COI eDNA\nλ = -0.0546", color = "black", hjust = 0.5, vjust = 1)
> ggsave("pp.png")

enter image description here


РЕДАКТИРОВАТЬ С tikzDevice:

Чтобы получить PDF, вы можете использовать tikzDevice, который преобразует ваш график в LaTeX.

library(tikzDevice)
plot2tikz <- function(code, filename="Rplot", outdir=getwd(),
                      overwrite=FALSE, format="pdf", lua=FALSE,
                      packages=NULL, addDefaultTikZoptions=TRUE,
                      compile=TRUE, clean=FALSE, ...){
  format <- match.arg(format, choices = c("pdf", "ps", "eps"))
  texfile <- paste0(filename, ".tex")
  owd <- setwd(outdir); on.exit(setwd(owd))
  if(overwrite || !file.exists(texfile)){
    if(is.null(packages)){
      if(format=="pdf") packages <- getOption("tikzLatexPackages")
      if(format %in% c("ps", "eps")) packages <- c("\\thispagestyle{empty}\n", "\\usepackage{tikz}\n")
    } else {
      if(!"\\usepackage{tikz}\n" %in% packages){
        packages <- c("\\usepackage{tikz}\n", packages)
        if(format=="pdf" && addDefaultTikZoptions){
          packages <- union(packages, getOption("tikzLatexPackages"))
        }
      }
    }
    tikz(texfile, standAlone=TRUE, onefile=FALSE, packages=packages, ...)
    code()
    grDevices::dev.off()
  }
  if(compile || format=="eps"){
    message("Compilation...")
    if(format=="pdf"){
      # pdf compilation
      pdffile <- stringr::str_replace(texfile, ".tex", ".pdf")
      if(overwrite || !file.exists(pdffile)){
        if(lua){
          command <- sprintf("lualatex %s", texfile)
          system(command)
        }else{
          tools::texi2dvi(texfile, pdf=TRUE, clean=clean)
        }
        message(sprintf("Output pdf file: %s.pdf", filename))
      }
    } else if(format %in% c("ps", "eps")){
      psfile <- stringr::str_replace(texfile, ".tex", ".ps")
      if(overwrite || !file.exists(psfile)){
        tools::texi2dvi(texfile, pdf=FALSE, clean=clean)
        command <- sprintf("dvips %s.dvi", filename)
        system(command)
        message(sprintf("Output ps file: %s.ps", filename))
        if(format=="eps"){
          command <- sprintf("ps2epsi %s.ps %s.epi", filename, filename)
          system(command)
          file.rename(sprintf("%s.epi", filename), sprintf("%s.eps", filename))
          message(sprintf("Output eps file: %s.eps", filename))
        }
      }
    }
  }
  #
  message(sprintf("Output tex file: %s", normalizePath(texfile, winslash=.Platform$file.sep)))
  return(invisible())
}


library(ggplot2)
plotCode <- function(){
  gg <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + 
    annotate("text", x = 300, y = 46, label = "COI eDNA\n$\\lambda$ = -0.0546", 
             color = "black", hjust = 0.5, vjust = 1)
  print(gg)
}


plot2tikz(plotCode, compile=FALSE, outdir=getwd(), overwrite = TRUE,
          packages=c("\\usepackage[active,tightpage,psfixbb]{preview}\n",
                     "\\PreviewEnvironment{pgfpicture}\n",
                     "\\setlength\\PreviewBorder{10pt}\n",
                     "\\usepackage{amssymb}\n"),
          documentDeclaration ="\\documentclass[12pt]{standalone}\n",
          width=7, height=5)

enter image description here

Да, с png это работает. Однако проблема в том, что мне нужно сохранить файл в формате PDF; преобразование из png в pdf после приводит к потере качества изображения. Как я могу сохранить в формате PDF в R, сохраняя при этом символ лямбда на моей фигуре?

ramateur 25.04.2022 00:55

@ramateur Вы можете использовать tikzDevice, чтобы получить высококачественную графику LaTeX. Смотрите мою правку.

Stéphane Laurent 25.04.2022 10:24

Другие вопросы по теме