gpt4 book ai didi

r - 将 ggplot 对象转换为使用 Open Sans Semibold 字体的 svg

转载 作者:行者123 更新时间:2023-12-03 11:49:14 27 4
gpt4 key购买 nike

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

  • 我用过 svglite转换 ggplot进入 svg它运作良好。
  • 我在轴的标题中包含了 Open Sans Semibold 字体(我在本地存储了所有 Open Sans 系列)。
  • 我创建了 rmarkdown博士。
    ---
    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 浏览器中打开此文档时,未显示 Open Sans Semibold。相反,Arial 取而代之。但是在 Safari 中它可以完美运行。
    事实证明(更多信息 here),那些使用 Open Sans Semibold 和 Light 的浏览器存在典型问题。为了解决它而不是使用半粗体版本,我使用css font-weight带基本款 'Open Sans', sans-serif .当我创建 <p> 时,它可以完美运行.
    ---
    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对象,因为它仍然使用 Open Sans Semibold 字体。在 ggplot无法使用 font-weight因为没有这样的东西。相反,您只能使用 face参数但该选项不接受 numeric值。

    我最初认为可行的一种解决方法是转换 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与标签和标题相关的标签。

    那么,有人有解决这个问题的想法吗?

    感谢任何阅读这最后一句话的人。我试图尽可能简短地总结我的问题。

    最佳答案

    您对解决方法的两种想法似乎都是直截了当的方法,并且要使它们与情节配合使用,您可以使用 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()))

    关于r - 将 ggplot 对象转换为使用 Open Sans Semibold 字体的 svg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777563/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com