首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ggplot对象转换为svg,使用Open半粗体字体

将ggplot对象转换为svg,使用Open半粗体字体
EN

Stack Overflow用户
提问于 2016-09-29 18:31:19
回答 1查看 1.2K关注 0票数 6

我想要创建一个ggplot绘图,它使用Open半粗体字体,然后我想将此图转换为svg。最后,将其包含在rmarkdown文档中。最大的问题是在浏览器上转换的对象上使用Open半粗体。

  1. 我使用svgliteggplot转换为svg,它工作得很好。
  2. 我在axis的标题中包含了Open半粗体字体(我在本地存储了所有Open家族)。
  3. 我创建了rmarkdown文档。 -标题:"“输出: 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半粗体不会出现。相反,Arial取代了它。然而,在Safari中,它工作得非常完美。结果(更多的信息,here),在开放的Sans,半粗体和轻型浏览器上有一个典型的问题。为了解决这个问题,我使用css font-weight和基本的'Open Sans', sans-serif,而不是使用半粗体的版本。当我创建一个<p>时,它工作得非常完美。

代码语言:javascript
复制
---
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}

图书馆(Svglite)

knitr::opts_chunk$set(

代码语言:javascript
复制
  dev = "svglite",
代码语言:javascript
复制
  fig.ext = ".svg"

)

代码语言:javascript
复制
```{r, warning = F, message = F, echo = F}

图书馆(Ggplot2)

数据(汽车)

(mtcar,aes(mpg,qsec,color =factor(Cyl)+

代码语言:javascript
复制
  geom_point() +
代码语言:javascript
复制
  theme(text = element_text(family = 'Open Sans'),
代码语言:javascript
复制
        axis.title = element_text(family = 'Open Sans Semibold'))
代码语言:javascript
复制

但是,此解决方案不适用于ggplot对象,因为它仍然使用Open半粗体字体。在ggplot中,不可能使用font-weight,因为没有这样的东西。相反,您只能使用face参数,但该选项不接受numeric值。

我最初认为可行的方法之一是将ggplot对象转换为html代码,然后使用css来操纵axis上的字体。

代码语言:javascript
复制
---
title: ""
output: html_document
---

```{r setup, include = FALSE}

图书馆(Svglite)

knitr::opts_chunk$set(

代码语言:javascript
复制
  dev = "svglite",
代码语言:javascript
复制
  fig.ext = ".svg"

)

代码语言:javascript
复制
```{r, warning = F, message = F, echo = F}

图书馆(Ggplot2)

数据(汽车)

S <- svgstring()

(mtcar,aes(mpg,qsec,color =factor(Cyl)+

代码语言:javascript
复制
  geom_point() +
代码语言:javascript
复制
  theme(text = element_text(family = 'Open Sans'),
代码语言:javascript
复制
        axis.title = element_text(family = 'Open Sans Semibold'))

HTML工具::HTML(s())

无形(

代码语言:javascript
复制
  dev.off()

)

代码语言:javascript
复制

在这种情况下,可以检测text标记并按我的意愿对它们进行操作,但是生成的代码是扁平的,即不容易区分与标签和标题相关的text标记。

那么,有谁想办法解决这个问题?

感谢所有读过最后一句的人。我尽量简短地总结我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-06 17:32:13

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

代码语言:javascript
复制
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()))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39777563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档