2016-09-29 2 views
3

Ich möchte ein ggplot Grundstück, das Open Sans Semibold Schriftart verwenden, und dann möchte ich dieses Diagramm in svg konvertieren. Schließlich schließen Sie das in Doc. Das größte Problem ist Open Sans Semibold auf dem konvertierten ggplot Objekt im Browser zu verwenden.Convert ggplot Objekt in Svg, die Open Sans Semibold Schriftart

  1. benutzte ich svgliteggplot in svg zu konvertieren und es funktioniert gut.
  2. Ich habe Open Sans Semibold Schriftart in Titeln der Achse (Ich habe alle Open Sans-Familie lokal gespeichert).
  3. Ich erstellte doc.

    --- 
    title: "" 
    output: html_document 
    --- 
    
    ```{r setup, include = FALSE} 
    library(svglite) 
    knitr::opts_chunk$set(
        dev = "svglite", 
        fig.ext = ".svg" 
    ) 
    ``` 
    
    ```{r, warning = F, message = F, echo = F} 
    library(ggplot2) 
    
    data(cars) 
    
    ggplot(mtcars, aes(mpg, qsec, color = factor(cyl))) + 
        geom_point() + 
        theme(text = element_text(family = 'Open Sans'), 
         axis.title = element_text(family = 'Open Sans Semibold')) 
    
    ``` 
    

Beim Öffnen dieses Dokuments in dem Chrome/Opera/Mozilla-Browser, wird die Open Sans Semibold nicht auf. Stattdessen ersetzt Arial es. In Safari funktioniert es jedoch einwandfrei. Es stellte sich heraus (mehr Info here), dass es ein typisches Problem bei diesen Browsern mit Open Sans Semibold und Light gibt. Um es zu lösen, anstatt Semi-Version zu verwenden, verwende ich css font-weight mit grundlegenden 'Open Sans', sans-serif. Und es funktioniert perfekt, wenn ich eine <p> erstellen.

--- 
title: "" 
output: html_document 
--- 

<style> 
     @import url(https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700); 

     .text_basic { 
      font-family: 'Open Sans', sans-serif; 
     } 

     .text_semibold { 
      font-family: 'Open Sans', sans-serif; 
      font-weight: 700; 
     } 
</style> 

<p class = 'text_basic'> 
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repellat, nisi quasi cupiditate, ratione, consequuntur adipisci reiciendis impedit, laborum tenetur qui neque nobis enim. Sunt 
</p> 

<p class = 'text_semibold'> 
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repellat, nisi quasi cupiditate, ratione, consequuntur adipisci reiciendis impedit, laborum tenetur qui neque nobis enim. Sunt 
</p> 

```{r setup, include = FALSE} 
library(svglite) 
knitr::opts_chunk$set(
     dev = "svglite", 
     fig.ext = ".svg" 
) 
``` 

```{r, warning = F, message = F, echo = F} 
library(ggplot2) 

data(cars) 

ggplot(mtcars, aes(mpg, qsec, color = factor(cyl))) + 
     geom_point() + 
     theme(text = element_text(family = 'Open Sans'), 
      axis.title = element_text(family = 'Open Sans Semibold')) 

``` 

Doch diese Lösung funktioniert nicht auf ggplot Objekt, weil es immer noch Open Sans Semibold Schriftart verwenden. In ggplot ist es nicht möglich, font-weight zu verwenden, weil es so etwas nicht gibt. Stattdessen können Sie nur das Argument face verwenden, aber diese Option akzeptiert keine numeric Werte.

Eine Problemumgehung, von der ich anfangs überzeugt bin, dass sie funktionieren könnte, besteht darin, das Objekt ggplot in HTML-Code umzuwandeln und dann css zu verwenden, um die Schriftarten auf der Achse zu bearbeiten.

--- 
title: "" 
output: html_document 
--- 

```{r setup, include = FALSE} 
library(svglite) 
knitr::opts_chunk$set(
     dev = "svglite", 
     fig.ext = ".svg" 
) 
``` 

```{r, warning = F, message = F, echo = F} 
library(ggplot2) 

data(cars) 

s <- svgstring() 

ggplot(mtcars, aes(mpg, qsec, color = factor(cyl))) + 
     geom_point() + 
     theme(text = element_text(family = 'Open Sans'), 
      axis.title = element_text(family = 'Open Sans Semibold')) 

htmltools::HTML(s()) 
invisible(
     dev.off() 
) 

``` 

In diesem Fall ist es möglich, text Tags zu erfassen und zu manipulieren, wie ich will, aber generierte Code ist flach heißt es nicht einfach ist text Tags zu den Etiketten und den Titel differatiate.

Also, hat jemand Idee, dieses Problem zu lösen?

Danke an alle, die diesen letzten Satz gelesen haben. Ich habe versucht, mein Problem so kurz wie möglich zusammenzufassen.

Antwort

1

Sowohl Ihre Ideen für dieses Problem zu umgehen scheinen gerade nach vorne nähert, und sie mit dem Grundstück machen arbeiten zu können, gsub direkt verwenden kann, um den HTML-Code zu modifizieren und die font-weight des style-Attributs des Textes festgelegt:

s <- svgstring() 

ggplot(mtcars, aes(mpg, qsec, color = factor(cyl))) + 
     geom_point() + 
     theme(text = element_text(family = 'Open Sans'), 
      axis.title = element_text(family = 'Open Sans Semibold')) 

gsub("font-family: Open Sans Semibold;", 
    "font-family: Open Sans;font-weight: 700;", 
    htmltools::HTML(s()))