我想创建一个使用Open Sans Semibold字体的ggplot
图,然后我想将此图转换为svg
。最后在rmarkdown
doc中加入此内容。最大的问题是在浏览器上转换的ggplot
对象上使用Open Sans Semibold。
svglite
将ggplot
转换为svg
,效果很好。我创建了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浏览器中打开此文档时,Open Sans Semibold不会显示。相反,Arial取而代之。然而在Safari中它完美无缺。
事实证明(更多信息here)在使用Open Sans Semibold和Light的浏览器上存在典型问题。为了解决它而不是使用semibold版本,我使用基本font-weight
的css '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
标签和标题。
那么,有人有想法解决这个问题吗?
感谢所有阅读最后一句话的人。我试图尽可能简短地总结我的问题。
答案 0 :(得分:1)
您对解决方法的想法似乎都是直接的方法,并且为了使它们适用于绘图,您可以使用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()))