Nic*_*abo 5 svg r ggplot2 r-markdown
我想创建一个ggplot使用Open Sans Semibold字体的绘图,然后将其转换为svg。最后将其包含在rmarkdown文档中。最大的问题是在浏览器上对转换后的ggplot对象使用Open Sans Semibold 。
svglite转换ggplot成svg它,并且效果很好。我创建了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'))
```
Run Code Online (Sandbox Code Playgroud)当我在Chrome / Opera / Mozilla浏览器中打开此文档时,Open Sans Semibold不显示。相反,Arial替换了它。但是,在Safari中它可以完美运行。事实证明(在这里有更多信息),那些使用Open Sans Semibold和Light的浏览器存在一个典型的问题。为了解决它而不是使用半粗体版本,我将CSS font-weight与basic一起使用'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'))
```
Run Code Online (Sandbox Code Playgroud)
但是,此解决方案不适用于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()
)
```
Run Code Online (Sandbox Code Playgroud)
在那种情况下,可以text按照我的意愿检测和操作标签,但是生成的代码是扁平的,即,区分text与标签和标题相关的标签并不容易。
那么,有人有解决这个问题的想法吗?
感谢阅读这最后一句话的任何人。我试图总结我的问题越短越好。
您的解决方法的想法似乎都是直接的方法,为了使它们与绘图一起工作,您可以使用gsub直接修改 HTML 并设置font-weight文本的 style 属性:
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()))
Run Code Online (Sandbox Code Playgroud)