-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
save_eps
não exporta transparência
#57
Comments
O @palmaresk8. Obrigado pelo alerta (e por todas outras contribuições pro pacote). Na epoca, o editorial disse que seria melhor salvar em |
@palmaresk8 @rafapereirabr Vou discutir com o Editorial as possíveis alternativas. Eu, particularmente, acho a exportação para |
Pessoal, estive investigando essa questão, e estou cada vez mais convencido sobre dois pontos:
Por que cheguei essas conclusões? Vou tentar argumentar abaixo e mostrar alguns exemplos. Porém minha conclusão é que o pacote do Ipeaplot ainda não está completamente funcional para uso, e soluções adicionais (que eu não cheguei a encontrar soluções) são necessárias para sua efetiva utilização. |
Considere o exemplo reprodutível a seguir: library(here)
library(tidyverse)
library(palmerpenguins)
library(extrafont)
# extrafont::font_import() # to be called just once, after installing the extrafont package (or whenever you install a new font)
extrafont::loadfonts(device = "pdf") # call this once per session
extrafont::fonts() # get a list of fonts
# GRAFICO ====
penguin_plot <- penguins |>
filter(!is.na(flipper_length_mm)) |>
ggplot(aes(x = flipper_length_mm, fill = species)) +
geom_histogram(alpha = 0.6, position = "identity", bins = 30) +
xlab("Flipper Length (mm)") +
ylab("Frequency") +
ggtitle("Distribution of flipper length, by species")
print(penguin_plot)
## Alterando fonte do gráfico ----
g1 = penguin_plot +
theme(text = element_text(family = "Gill Sans MT"), title = element_text(face = "italic"))
print(g1)
Isso vai gerar o seguinte gráfico: A alteração da fonte do gráfico foi intencional, e tem por objetivo mostrar um problema que ocorre quando se exporta esse gráfico para o formato vetorial (seja |
Ao exportar esse gráfico para diferentes formatos vetoriais, obtemos diferentes resultados (usando o Inkscape): Formato
Formato
Formato
Portanto, do ponto de vista do designer (isto é, do Editorial do Ipea), o formato O problema é que o Usando a biblioteca # OPÇÕES DE SALVAMENTO COMO 'EPS' ====
ggsave(
filename = here("Output", "gplot_antes.eps"),
plot = g1,
device = cairo_ps,
fallback_resolution = 300
)
# OPÇÕES DE SALVAMENTO COMO 'SVG' ====
ggsave(
filename = here("Output", "gplot_antes.svg"),
plot = g1,
device = svg
)
# OPÇÕES DE SALVAMENTO COMO 'PDF' ====
## Usando 'ggsave' somente ----
# FIXME: a fonte NÃO é incorporada e, além disso, aponta para o caminho errado.
ggsave(filename = here("Output", "gplot_antes.pdf"), plot = g1)
# PDF error: No display font for 'Symbol'
# PDF error: No display font for 'ArialUnicode'
# PDF error: Couldn't find a font for 'GillSansMT', subst is 'Helvetica'
# PDF error: Couldn't find a font for 'GillSansMT-Italic', subst is 'Helvetica'
# name type embedded file
# <chr> <chr> <lgl> <chr>
# GillSansMT type1 FALSE "C:\\WINDOWS\\Fonts\\arial.ttf"
# GillSansMT-Italic type1 FALSE "C:\\WINDOWS\\Fonts\\arial.ttf"
# name type emb sub uni prob object ID
# ---------------------------------------------- ----------------- --- --- --- ---- ---------
# GillSansMT-Italic Type 1 no no no 12 0
# GillSansMT Type 1 no no no 10 0
pdftools::pdf_text(pdf = here("Output", "gplot_antes.pdf"))
pdftools::pdf_fonts(pdf = here("Output", "gplot_antes.pdf"))
|
Então o problema no caso do Abaixo eu vou mostrar como consegui exportar um arquivo
Ambos os softwares podem ser instalados individualmente, a partir de suas páginas, ou utilizando o scoop. A vantagem do
O resultado final é um arquivo ## Usando 'embed_fonts' com opções ----
# Grava o gráfico no formato pdf.
ggsave(filename = here("Output", "gplot_antes.pdf"), plot = g1)
help("embed_fonts") # pacote 'extrafont'
help("embedFonts") # pacote 'grDevices'
Sys.setenv(R_GSCMD = r"(C:\Users\palma\scoop\shims\gswin64c.exe)")
# Altera o arquivo anterior, para incorporar as fontes utilizadas.
# DEU CERTO. A fonte é incorporada na sua totalidade.
# Como a função extrafont::embed_fonts chama a função grDevices::embedFonts, mas com parâmetros errados,
# então conseguimos replicar o comando do ghostscript correto usando esta última função.
grDevices::embedFonts(
file = here("Output", "gplot_antes.pdf"),
outfile = here("Output", "gplot_depois.pdf"),
fontpaths = "C:/Windows/Fonts",
options = "-dEmbedAllFonts=true -dSubsetFonts=false"
)
# name type embedded file
# GillSansMT truetype TRUE ""
# GillSansMT-Italic truetype TRUE ""
# name type emb sub uni prob object ID
# ---------------------------------------------- ----------------- --- --- --- ---- ---------
# GillSansMT TrueType yes no no 12 0
# GillSansMT-Italic TrueType yes no no 14 0
pdftools::pdf_text(pdf = here("Output", "gplot_depois.pdf"))
pdftools::pdf_fonts(pdf = here("Output", "gplot_depois.pdf")) Note que o pacote No caso, o parâmetro mais importante aqui é fontpaths = "C:/Windows/Fonts", pois ele aponta o diretório onde a fonte está instalada (que também pode ser em uma pasta do perfil do usuário). Uma especificação errada do |
@palmaresk8 Muito obrigado por essa análise tão completa. A partir dela, acho que devemos tentar trabalhar numa solução para a exportação do ipeaplot. Mas concordo contigo, acho que faz sentido focar, por enquanto, no theme e deixar a exportação para quando resolvermos essses problemas. Inclusive, estamos conversando com o Editorial e eles manifestaram abertura para receber pdfs. No entanto, teremos que, primeiro, encontrar as soluçoes para a exportação do pdf. |
Por fim, ao tentar estender esse exemplo para usar o tema do pacote Ipeaplot, eu não consegui mais exportar um arquivo library(ipeaplot)
g1 = penguin_plot +
scale_fill_ipea(palette = "Red-Blue", discrete = TRUE) +
theme_ipea(
expand_y_limit = FALSE
)
print(g1)
ggsave(filename = here("Output", "gplot_antes.pdf"), plot = g1)
# O texto contido no gráfico é transformado em caminhos.
pdftools::pdf_text(pdf = here("Output", "gplot_antes.pdf"))
pdftools::pdf_fonts(pdf = here("Output", "gplot_antes.pdf"))
Talvez isso tenha a ver com o fato das fontes do tema do Ipeaplot não estarem instaladas no meu computador, da mesma forma que a Gill Sans MT utilizada no exemplo está. De fato, quando eu rodo o comando
Em função disso, eu suspeito que esse seja um dos motivos do pessoal do Editorial não gostar de utilizar o formato Bem, isso é até onde eu consegui chegar. Resumidamente, eu estou tentando usar um gráfico com transparência, mas não consigo exportar esse gráfico para um formato completamente editável, e daí vou tomar toco do Editorial. Valeu, abraços. |
Esse ponto é algo que podemos avaliar de imediato: "tema do pacote Ipeaplot, eu não consegui mais exportar um arquivo pdf em que o texto é editável". Para pelo menos ter um pdf editável, o que já seria uma vantagem para o editorial em muitos casos. |
@cavalcanti1985 , creio que o ponto de partida para resolver o problema de gerar um arquivo vetorial (preferencialmente pdf) completamente editável, incluindo os elementos textuais pode começar por resolver o problema do registro da fonte Frutiger: me parece que a fonte não foi disponibilizada na íntegra no Ipeaplot, fazendo com que ela não seja devidamente 'registrada' pela biblioteca Vi que essa é uma fonte comercial, vendida por algumas $$$ no myfonts ou para quem tem o antigo CD do Adobe Font Folio 11.1, e é disponibilizada comercialmente no formato OpenType, que é diferente daquela do Ipeaplot que está em TrueType. Eu entendo que o Ghostscript somente 'embute' fontes TrueType, motivo esse que deve ter havido uma conversão da fonte de OpenType para TrueType. Mas então, talvez seja necessário disponibilizar todos os elementos da fonte (bold, italic, bold-italic e normal) para que ela seja registrada corretamente no R. |
@palmaresk8 excelente, muito obrigado. Realmente nao esperava que o ggplot tivesse tanto problema para exportar gráfico editáveis. Sendo, ao que parece, um problema geral, eu acho que deveríamos abrir perguntas sobre isso (com baseno REPEX acima) no StackOverflow e talvez issues no proprio repositório do ggplot2 (se abrirem nos dois indicar a existencia da referencia cruzada) |
Obrigado @palmaresk8 pela investigação tao detalhada e por todas sugestoes! Pelo o que entendi, o problema de exportar para PDF ocorre apenas nas fontes. Certo? Se sim, minha sugestão seria:
Assim, a edição publica do pacote nao editaria as fontes e o editorial teria q fazer esse ajuste como já costumam fazer hoje em dia. Até um dia resolvermos esse problema de exportar a fonte correta no formato correto em pdf. o que acham? |
Nao tem alguma fonte padrao que seja parecida com o padrao Ipea?
Em qui., 30 de mai. de 2024 às 10:04, Rafael H M Pereira <
***@***.***> escreveu:
… Obrigado @palmaresk8 <https://github.com/palmaresk8> pela investigação
tao detalhada e por todas sugestoes!
Pelo o que entendi, o problema de exportar para PDF ocorre apenas nas
fontes. Certo? Se sim, minha sugestão seria:
- retirar no pacote a edição das fontes por enquanto
- criarmos a função save_pdf()
- aposentarmos a função save_eps()
Assim, a edição publica do pacote nao editaria as fontes e o editorial
teria q fazer esse ajuste como já costumam fazer hoje em dia. Até um dia
resolvermos esse problema de exportar a fonte correta no formato correto em
pdf.
o que acham?
—
Reply to this email directly, view it on GitHub
<#57 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAK4HCFBKF6ZJHJATP3TA4LZE45YTAVCNFSM6AAAAABHO6Q6GSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZZHA2DAOBXGU>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Pessoal, vou checar com o Editorial se existe algum fonte que seja similar. |
Pessoal, eu estou fazendo uns testes adicionais aqui... Se der certo, em breve eu posto algum resultado. Confesso que esse lance de PDF, fontes, semitransparência, vetores, print devices etc está me afundando em um universo novo (e muito complicado, por sinal). Resumidamente, atuando em duas frentes:
Bem, Então vou testar aqui se essa chamada do |
Incluo o @PedroJorge7 na conversa. Ele lidou com essa questão da fonte e pode detalhar melhor. Acredito que usamos o showtext porque havia algum problema com o extrafont. Imagino que esse problema tenha sido causado pelo questão do formato das fontes (OTF/TTF). |
O @PedroJorge7 vai trabalhar em um branch separado para testar algumas soluções relacionadas às fontes e à exportação das figuras. Assim que tivermos algo mais consistente, apresentaremos para vocês. |
@cavalcanti1985 @PedroJorge7, eu acho que encontrei uma solução. Posso propor um pull request, se vocês preferirem, existem pequenas modificações no código em relação ao que coloquei anteriormente. Antes de mais nada, vou colocar mais algumas coisas que descobri sobre os graphic devices do R e que ajudam a entender o que está rolando. Desculpem se estiver me repetindo, estou colocando mais como referência posterior, pois tem muita informação aqui. Primeiramente, percebi que faz toda diferença se a fonte está ou não instalada no computador do usuário. Se a fonte está instalada, então o
Agora, se a fonte não está instalada (como vai ser o caso das fontes Frutiger no pacote ipeaplot), o pacote
Resumindo então: para o caso da fonte não estar instalada no computador do usuário (que é o cenário mais provável, pois ela custa dinheiros):
Logo, daria para fazer uma função Por fim, gostaria de informar que sim, as fontes que estão no diretório Vou juntar tudo e compartilhar com vocês, ou por e-mail ou tentando um PR (não sei fazer isso ainda). Abraços. |
@palmaresk8 pode mandar sua sugestão por e-mail mesmo, não tem problema. @lucasmation @rafapereirabr Se formos usar o extrafont + Ghostscript, teremos que abrir um tutorial para orientar o usuário. Seria bom também dar um pequeno workshop, para divulgar o pacote e esclarecer o uso do ghostscript. |
Super obrigado @palmaresk8 por toda pesquisa. Muito esclarecedora! Pessoalmente, eu acho muito ruim a ideia de exigirmos que o usuário tenham instalado o Ghostscript. Isso cria uma barreira a mais pro usuário. Agora seria ideal mesmo se a solução do @palmaresk8 permitisse detectar automaticamente se o Ghostscript está instalado e a partir daí gerar o texto da maneira adequada de acordo com a maquina local do usuário. Eu entendi que foi isso aqui Fabão já conseguiu implementar. Certo, @palmaresk8 ? |
Valeu pessoal
|
Vou abrir a pergunta, @lucasmation. Existem fontes similares, mas sendo similar ou não, o Ediotiral teria que alterar para a Frutiger no momento da diagramação da figura. @rafapereirabr até onde entendi, na solução do @palmaresk8, nos casos em que o não existe o Ghostscript, o pdf seria gerado usando o showext, exatmente como hoje. Logo, o não seria possível enviar ao Editorial o pdf com fontes abertas. @palmaresk8, poderíamos ter uma solução do tipo:
|
Pessoal , sobre as fontes, entendo que há algumas questões:
|
Acho que devemos encaminhar uma solução e começar a trabalhar para implementar.
O que acham, @lucasmation @rafapereirabr @palmaresk8 @PedroJorge7? |
meu voto:
noutras palavras, abandonamos (por enquanto) a tentativa de implementar fontes especificas no {ipeaplot}. É um trampo muito complexo para um retorno muito muito pequeno |
@rafapereirabr Eu acho importante ter uma fonte configurada para quem, por exemplo, for trabalhar em publicações expressas e quiser já ter um certo padrão nas imagens. |
Concordo que seria ideal gerar a figura no formato mais proximo possivel do padrao adotado pelo editorial. Mas isso não é necessario para publicações expressas. Bom, é uma questão de encontrar um equilibrio entre o nivel de "fidelidade" do output e a quantidade de esforço extra necessária. Se o @palmaresk8 ja resolveu essa questao de detectar automaticamente Ghostscript etc etc, entao ótimo. |
Pessoal, criei um issue no stackoverflow. Caso tenham algum ponto adicional eu posso editar e incluir |
@lucasmation @rafapereirabr @palmaresk8, subimos uma nova versão do ipeaplot com nova abordagem para as fontes. A Roboto é agora a fonte padrão. Porém, é responsabiliade do usário a instalação dela no sistema (colocamos tutoriais sobre isso no readme e nas vinhetas). Caso ele não instale, os graficos sairão com uma fonte sans padrão do OS. Como as funções save_pdf e save_eps terão textos editáveis, o Editorial poderá facilmente realizar as alterações necessárias (que já seriam feitas de qualquer maneira, pois eles insistem na Frutiguer). Se puderem, façam alguns testes. Pretendo subir para o CRAN assim que vocês derem o ok. |
@lucasmation @palmaresk8 @rafapereirabr, então, pessoal. Podemos subir a nova versão pro CRAN? |
por mim, Ok |
eu tinha falado com o Aero do Editorial (nao lembro se por email ou pessoalmente). Ele disse, pega alguma fonte open-source fácil que seja similar às que usamos. Poderíamos seguir isso. Dizer pro usuário instalar coisas fora do R eu acho complicado, gera uma solucao confusa para algo que deveria ser fácil. |
@lucasmation O problema é que qualquer fonte que não seja default nos sistemas dos usuários terá que ser instalada ou os engine de pdf e eps não reconhecerão. Nos sistemas comuns (macOS, WIndows, Linux) temos default apenas coisas como a VERDANA, que não são lá muito parecidas com a Frutiger, na minha opinião. De qualquer forma, se a pessoa não fizer nada, o gráfico vai sair com uma fonte sem serifa (familia da Frutiger)padrão do seu sistema operacional e o editorial poderá alterar quando receber o arquivo. |
Eu sugiro validar com editorial qual deve ser esta fonte, entre as padrao dos Sistemas Operacionais. E só ter isso, sem explicar pro user como instalar Roboto, etc... |
Blz. |
@rafapereirabr @lucasmation , o @PedroJorge7 ainda está ajustando vinhetas e limpando o código, mas, na falta de uma fonte que seja comum aos sistemas operacionais e parecida com a frutiger, desistimos de estipular uma família tipográfica única. O código agora prevê apenas que a fonte será sempre "sem serifa". Em cada sistema operacional, o gráfico será gerado com o tipo default específico sem serifa. No caso do Windows, a Arial. Teremos, portanto, uma harmonização mínima (ninguém vai usar times new roman ou fontes malucas), mas, no final, o Editorial terá que trocar a família tipográfica no processo de diagramação da publicação (como seria necessário, em todo caso, desde que abandonamos a frutiger). Concordam? |
Eu concordo. Tem que ter ficar algo simples para o usuario e mantedores do pacote. O {ipeaplot} deve chegar o mais proximo possivel do padrao do editorial, e deixar bem documentado esses casos em que tem algum pequeno desvio que vai demandar ajuste do editorial. |
De acordo @cavalcanti1985, mas só nos confirma se você validou a aceitabilidade da fonte (na maioria dos casos vai ser Arial) com Editorial |
Ok. |
Meus caros, um problema que eu estou tendo é exportar gráficos com transparência usando o ipeaplot.
O procedimento que vocês recomendam é exportar usando eps mas, ao usar a função
save_eps
, as figuras com transparência não são exportadas.Considere o seguinte gráfico:
O código de origem foi:
Ao usar o
save_eps
, usando o código abaixo, aparece a seguinte mensagem:Como consequência, a parte de semi-transparência não é exportada. Pelo que vi, esse é um problema do formato
eps
. Se eu usar oggsave
usando como device o Cairo graphics, o R até exporta a semi-transparência, mas ela não é exportada em formato vetorial, e sim em formato raster (bitmap). Somente a semi-transparência é exportada assim, todos os outros objetos são vetoriais:Fazendo alguns testes, vi que há opções melhores, mas que não consistem em usar o formato
eps
.Fico me pergutando portanto qual o motivo de se sugerir usar
eps
ao invés desvg
ou mesmopdf
, este último pelo que pesquisei é importando pelo Adobe Ilustrator utilizado pelo Editorial do Ipea.The text was updated successfully, but these errors were encountered: