Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将ggplot对象转换为svg,该svg使用开放式Sans半黑体字体_R_Svg_Ggplot2_R Markdown - Fatal编程技术网

R 将ggplot对象转换为svg,该svg使用开放式Sans半黑体字体

R 将ggplot对象转换为svg,该svg使用开放式Sans半黑体字体,r,svg,ggplot2,r-markdown,R,Svg,Ggplot2,R Markdown,我想创建一个ggplot绘图,它使用Open Sans Semibold字体,然后我想将此绘图转换为svg。最后将其包含在r标记doc中。最大的问题是在浏览器上转换的ggplot对象上使用Open SAN Semibold。 我使用svglite将ggplot转换为svg,效果很好 我在axis的标题中包括了OpenSans半黑体字体(我在本地存储了所有OpenSans系列) 我创建了rmarkdowndoc --- title: "" output: html_document --- ``

我想创建一个
ggplot
绘图,它使用Open Sans Semibold字体,然后我想将此绘图转换为
svg
。最后将其包含在
r标记
doc中。最大的问题是在浏览器上转换的
ggplot
对象上使用Open SAN Semibold。

  • 我使用
    svglite
    ggplot
    转换为
    svg
    ,效果很好
  • 我在axis的标题中包括了OpenSans半黑体字体(我在本地存储了所有OpenSans系列)
  • 我创建了
    rmarkdown
    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'))
    
    ```
    
  • 当我在Chrome/Opera/Mozilla浏览器中打开此文档时,打开的SAN Semibold不会显示。相反,Arial取代了它。然而,在Safari中,它工作得非常完美。 事实证明(更多信息)那些使用开放式Sans半黑体和Light的浏览器存在一个典型的问题。为了解决这个问题,我使用css
    font-weight
    和基本
    的“开放式Sans”、Sans-serif
    。当我创建一个
    时,它可以完美地工作

    ---
    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'))
    
    ```
    
    在这种情况下,可以检测
    文本
    标记,并根据需要对其进行操作,但生成的代码是扁平的,即不容易区分与标签和标题相关的
    文本
    标记

    那么,有人有办法解决这个问题吗


    感谢所有读过最后一句话的人。我试图尽可能简短地总结我的问题。

    您的两种解决方法似乎都是直截了当的方法,为了使它们与绘图一起工作,您可以使用
    gsub
    直接修改HTML并设置文本样式属性的
    font-weight

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