我想创建一个使用Open Sans Semibold字体的ggplot图,然后我想将此图转换为svg.最后在rmarkdown doc中包含这个.最大的问题是在浏览器上转换的ggplot对象上使用Open Sans Semibold.
>我使用svglite将ggplot转换为svg,效果很好.
>我在轴的标题中包含了Open Sans Semibold字体(我在本地存储了所有Open Sans系列).
>我创建了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版本,我使用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参数,但该选项不接受数值.
我最初认为可行的一种解决方法是将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()
)
```
在这种情况下,可以检测文本标签并按照我的意愿操纵它们,但生成的代码是平的,即不容易区分与标签和标题相关的文本标签.
那么,有谁有想法解决这个问题?
谢谢任何读过最后一句的人.我试图尽可能简短地总结我的问题.
最佳答案 您的解决方法的想法似乎都是直接的方法,并且为了使它们适用于绘图,您可以使用gsub直接修改HTML并设置文本的style属性的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()))