将 ggplot object 转换为使用 Open Sans Semibold 字体的 svg
convert ggplot object into svg which use Open Sans Semibold font
我想创建一个使用 Open Sans Semibold 字体的 ggplot
图,然后我想将此图转换为 svg
。最后将其包含在 rmarkdown
文档中。最大的问题是在浏览器上转换后的ggplot
object上使用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
object,因为它仍然使用 Open Sans Semibold 字体。在 ggplot
中不可能使用 font-weight
因为没有这样的东西。相反,您只能使用 face
参数,但该选项不接受 numeric
值。
我最初认为可行的一种解决方法是将 ggplot
object 转换为 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()))
我想创建一个使用 Open Sans Semibold 字体的 ggplot
图,然后我想将此图转换为 svg
。最后将其包含在 rmarkdown
文档中。最大的问题是在浏览器上转换后的ggplot
object上使用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
object,因为它仍然使用 Open Sans Semibold 字体。在 ggplot
中不可能使用 font-weight
因为没有这样的东西。相反,您只能使用 face
参数,但该选项不接受 numeric
值。
我最初认为可行的一种解决方法是将 ggplot
object 转换为 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()))