我想要创建一个ggplot绘图,它使用Open半粗体字体,然后我想将此图转换为svg。最后,将其包含在rmarkdown文档中。最大的问题是在浏览器上转换的对象上使用Open半粗体。
svglite将ggplot转换为svg,它工作得很好。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>时,它工作得非常完美。
---
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(
dev = "svglite", fig.ext = ".svg")
```{r, warning = F, message = F, echo = F}图书馆(Ggplot2)
数据(汽车)
(mtcar,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半粗体字体。在ggplot中,不可能使用font-weight,因为没有这样的东西。相反,您只能使用face参数,但该选项不接受numeric值。
我最初认为可行的方法之一是将ggplot对象转换为html代码,然后使用css来操纵axis上的字体。
---
title: ""
output: html_document
---
```{r setup, include = FALSE}图书馆(Svglite)
knitr::opts_chunk$set(
dev = "svglite", fig.ext = ".svg")
```{r, warning = F, message = F, echo = F}图书馆(Ggplot2)
数据(汽车)
S <- svgstring()
(mtcar,aes(mpg,qsec,color =factor(Cyl)+
geom_point() + theme(text = element_text(family = 'Open Sans'), axis.title = element_text(family = 'Open Sans Semibold'))HTML工具::HTML(s())
无形(
dev.off())
在这种情况下,可以检测text标记并按我的意愿对它们进行操作,但是生成的代码是扁平的,即不容易区分与标签和标题相关的text标记。
那么,有谁想办法解决这个问题?
感谢所有读过最后一句的人。我尽量简短地总结我的问题。
发布于 2016-10-06 17:32:13
这两种解决方案看起来都是直接的方法,为了使它们与绘图一起工作,您可以使用gsub直接修改font-weight并设置文本的样式属性的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()))https://stackoverflow.com/questions/39777563
复制相似问题