2016-09-29 9 views
3

Open Sans Semiboldフォントを使用するggplotプロットを作成し、このプロットをsvgに変換したいと考えています。最後に、文書にこれを含めてください。最大の問題は、で、ブラウザ上で変換されたggplotオブジェクトに対してOpen Sans Semiboldを使用することです。ggplotオブジェクトをOpen Sans Semiboldフォントを使用するsvgに変換する

  1. 私はsvgggplotを変換するsvgliteを使用し、それがうまく動作します。
  2. 私はOpen Sans Semiboldフォントを軸のタイトルに含めました(私はすべてのOpen Sansファミリーをローカルに保存しました)。
  3. 私はdocを作成しました。私はクローム/オペラ/ Mozillaブラウザでこのドキュメントを開くと、オープンなきSemiboldは表示されません

    --- 
    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')) 
    
    ``` 
    

。代わりにArialがそれを置き換えます。しかしSafariでは完全に動作します。 Open Sans SemiboldとLightが付いているブラウザでは、一般的な問題があることが判明しました(詳細はhere)。半二重バージョンを使用するのではなく、それを解決するために、私はを基本としたCSS font-weightを使用します。 <p>を作成すると完全に動作します。それはまだオープンなきSemiboldフォントを使用しているため

--- 
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')) 

``` 

しかし、この解決策は、ggplotオブジェクト上では動作しません。 ggplotの中にそのようなことがないのでfont-weightを使用することはできません。代わりにface引数のみを使用できますが、そのオプションはnumeric値を受け入れません。

私が当初考えていた回避策の1つは、ggplotオブジェクトをHTMLコードに変換し、cssを使用して軸のフォントを操作することです。その場合

--- 
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() 
) 

``` 

textタグを検出し、私がしたいようにそれらを操作することが可能であるが、コードを生成し、ラベルにし、タイトルに関連textタグをdifferatiateすることは容易ではない、すなわち平坦です。

誰でもこの問題を解決する考えがありますか?

この最後の文章をお読みいただきありがとうございます。私は問題をできるだけ短く要約しようとしました。この問題を回避するための

答えて

1

どちらもあなたのアイデアがまっすぐ前方アプローチに見える、と彼らは、プロットを動作させるために、あなたは直接HTMLを変更し、テキストのスタイル属性のfont-weightを設定するgsubを使用することができます。

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())) 
関連する問題