R 在轴标签ggplot2中混合字体样式

R 在轴标签ggplot2中混合字体样式,r,ggplot2,R,Ggplot2,我想通过加粗一些文本来设置ggplot2轴标签的样式。理想情况下,我想控制字体大小也。这一切都可能吗?下面是我正在尝试做的示例: qplot(x = x, y = y, data = data.frame(x = rnorm(10), y = rnorm(10))) + labs(x = "14pt Bold text \n12pt normal text") 因此,我想要14pt粗体字体,而不是14pt粗体文本,对于12pt普通文本,我想要12pt普通文本 我在谷歌上搜索了一些例子,我所

我想通过加粗一些文本来设置ggplot2轴标签的样式。理想情况下,我想控制字体大小也。这一切都可能吗?下面是我正在尝试做的示例:

qplot(x = x,  y = y, data = data.frame(x = rnorm(10), y = rnorm(10))) + 
labs(x = "14pt Bold text \n12pt normal text")
因此,我想要14pt粗体字体,而不是
14pt粗体文本,对于12pt普通文本,我想要12pt普通文本

我在谷歌上搜索了一些例子,我所发现的只是改变所有标签外观的方法,或者使用
plotmath
表达式,奇怪的是这些表达式对ggplot2没有影响,也就是说,使用
labs(x=expression(“粗体(粗体文本)”)
没有效果

更新

我总是试图问一个过于笼统的问题。我想要实现的完整示例还涉及使用自定义字体。我使用的字体是,我想要的外观如下:

library(showtext)
library(ggplot2)

font.add("AvenirNextLTPro", 
         regular = "AvenirNextLTPro-Regular.otf", 
         bold="AvenirNextLTPro-Demi.otf",    
         italic = "AvenirNextLTPro-It.otf", 
         bolditalic = "AvenirNextLTPro-DemiIt.otf")
showtext.auto() 

ggplot(data = data.frame(x = rnorm(10), y = rnorm(10)), aes(x = x, y = y)) + 
    geom_point() + 
    labs(x = "14pt Bold text \n12pt normal text", 
         y = "14 pt Bold text\n\n 12pt\nnormal\ntext") + 
    theme(axis.title.y = element_text(angle = 0, hjust = 1, family = "AvenirNextLTPro"), axis.title.x = element_text(family = "AvenirNextLTPro"))

请注意,要使其正常工作,您需要安装字体,即它们应该在
font.files()
中可见。对于Mac OS X,这可以通过打开字体应用程序并添加下载的字体来实现。

Pierre在评论中的回答是一个非常好的方法,可以以更通用的方式处理这一问题。然而,有了新的
caption
plot/theme元素(在本月晚些时候发布之前安装github版本的ggplot2),如果您所需要的只是您所描述的内容,那么就可以进行快速破解

ggplot(data.frame(x=rnorm(10), y=rnorm(10))) +
  geom_point(aes(x, y)) +
  labs(x="14pt Bold text", caption="12pt normal text") +
  theme(axis.title.x=element_text(size=14, face="bold", hjust=0.5)) +
  theme(plot.caption=element_text(size=12, face="plain", hjust=0.5))

另外,请尽量避免使用诱人的快捷方式
qplot()
。我花了一些时间将其从绝大多数示例中删除,包作者本人并不鼓励使用它

更新

这是一个糟糕的黑客,但是

将在y轴上得到相同的结果。如果需要,您可以稍微修改间距,但毫无疑问,对于任何“生产”/“出版”绘图,您都需要调整
hjust

我根据@hrbmstr建议提出的最终解决方案(近似于某些调整)如下所示

library(showtext)
library(ggplot2)
library(gridExtra)

font.add("AvenirNextLTPro", 
         regular = "AvenirNextLTPro-Regular.otf", 
         bold="AvenirNextLTPro-Demi.otf",    
         italic = "AvenirNextLTPro-It.otf", 
         bolditalic = "AvenirNextLTPro-DemiIt.otf")
showtext.auto() 

gg<-ggplot(data = data.frame(x = rnorm(10), y = rnorm(10)), aes(x = x, y = y)) + 
    geom_point()+
    theme(axis.title.y = element_blank(), axis.title.x = element_blank())

grid.newpage()
gt <- ggplot_gtable(ggplot_build(gg))

t1 <- textGrob("Left upper text",y=unit(0,"npc"),just="bottom",gp = gpar(fontsize=14,fontfamily="AvenirNextLTPro",fontface="bold.italic"))
t2 <- textGrob("Left lower text",y=unit(1,"npc"),just="top", gp = gpar(fontsize=12,fontfamily="AvenirNextLTPro",fontface="italic"))
b1 <- textGrob("Bottom upper text",y=unit(0,"npc"),just="bottom", gp = gpar(fontsize=14,fontfamily="AvenirNextLTPro",fontface="bold.italic"))
b2 <- textGrob("Bottom lower text",y=unit(1,"npc"),just="top", gp = gpar(fontsize=12,fontfamily="AvenirNextLTPro",fontface="italic"))

lay2 <- rbind(c(1,3),c(2,3),c(NA,4),c(NA,5))

grid.arrange(t1,t2,gt,b1,b2, layout_matrix = lay2, widths=unit(c(0.15,0.85),"npc"), heights=unit(c(0.9/2,0.9/2,0.1/2,0.1/2),"npc"))
库(showtext)
图书馆(GG2)
图书馆(gridExtra)
font.add(“AvenirNextLTPro”,
regular=“AvenirNextLTPro regular.otf”,
bold=“AvenirNextLTPro Demi.otf”,
italic=“AvenirNextLTPro It.otf”,
bolditalic=“AvenirNextLTPro demit.otf”)
showtext.auto()

gg检查这些答案是否有助于
plotmath
示例代码使用
表达式(粗体(“粗体文本”)
工作。您可以在此基础上添加
top
,但是
top
之间的间距通常不是我们想要的。请参阅
labs(x=expression(顶部为(粗体(“粗体文本”),“普通文本”))
。我也将其用于showtext包,对于该plotmath表达式,粗体不起作用。@aosmith,我已用粗体表达式不起作用的代码更新了问题。我怀疑这可能与平台有关。但是请注意,在
element\u text
中指定粗体字体会选择粗体字体。是的,我看到了标题,但不幸的是,我也需要设置y轴标签的样式。我想那就行不通了?啊,是的。Pierre提到的grob编辑很可能是你唯一的实际选择…但是(让我试试)
library(showtext)
library(ggplot2)
library(gridExtra)

font.add("AvenirNextLTPro", 
         regular = "AvenirNextLTPro-Regular.otf", 
         bold="AvenirNextLTPro-Demi.otf",    
         italic = "AvenirNextLTPro-It.otf", 
         bolditalic = "AvenirNextLTPro-DemiIt.otf")
showtext.auto() 

gg<-ggplot(data = data.frame(x = rnorm(10), y = rnorm(10)), aes(x = x, y = y)) + 
    geom_point()+
    theme(axis.title.y = element_blank(), axis.title.x = element_blank())

grid.newpage()
gt <- ggplot_gtable(ggplot_build(gg))

t1 <- textGrob("Left upper text",y=unit(0,"npc"),just="bottom",gp = gpar(fontsize=14,fontfamily="AvenirNextLTPro",fontface="bold.italic"))
t2 <- textGrob("Left lower text",y=unit(1,"npc"),just="top", gp = gpar(fontsize=12,fontfamily="AvenirNextLTPro",fontface="italic"))
b1 <- textGrob("Bottom upper text",y=unit(0,"npc"),just="bottom", gp = gpar(fontsize=14,fontfamily="AvenirNextLTPro",fontface="bold.italic"))
b2 <- textGrob("Bottom lower text",y=unit(1,"npc"),just="top", gp = gpar(fontsize=12,fontfamily="AvenirNextLTPro",fontface="italic"))

lay2 <- rbind(c(1,3),c(2,3),c(NA,4),c(NA,5))

grid.arrange(t1,t2,gt,b1,b2, layout_matrix = lay2, widths=unit(c(0.15,0.85),"npc"), heights=unit(c(0.9/2,0.9/2,0.1/2,0.1/2),"npc"))