如何在 R 中增加绘图中的字体大小?

Posted

技术标签:

【中文标题】如何在 R 中增加绘图中的字体大小?【英文标题】:How to increase font size in a plot in R? 【发布时间】:2022-01-18 19:46:09 【问题描述】:

我很困惑。在标题、标签和绘图的其他位置增加文本字体大小的正确方法是什么?

例如

x <- rnorm(100)
hist(x, xlim=range(x), xlab= "Variable Label", 
     ylab="density", main="Title of plot", prob=TRUE, ps=30)

ps 参数不会改变字体大小(但它在 R 帮助中为 ?par 说明它是用于“文本的磅值(但不是符号)”。

是否也可以将更改字体大小与绘图功能分开,例如hist

【问题讨论】:

How to change the label size of an R plot的可能重复 【参考方案1】:

您需要类似cex=1.5 参数来将字体缩放150%。但是请查看help(par),因为还有cex.labcex.axis、...

【讨论】:

谢谢!与“ps=1.5”有什么区别? 为什么 cex=1.5 不起作用?但是必须根据 cex.lab、cex.axis、cex.main 来指定每个部分? cex=1.5 有什么用? 你读过help(par)关于ps的信息吗?据我所知,似乎与文本无关。 就是这样,部分肯定是为了向后兼容 S 语言的先前实现。 cex 是放大倍数。默认值为 1。如果您需要指定字体大小,您最好准备好深入研究以 ?Devices、?pdfFonts、?pdf、?embedFonts 等开头的文档。【参考方案2】:

因此,总结现有的讨论,添加

cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5

到您的绘图中,其中 1.5 可以是 2、3 等,默认值为 1 会增加字体大小。

x <- rnorm(100)

cex 不会改变事情

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE)

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE, 
     cex=1.5)

添加 cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE, 
     cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5)

【讨论】:

顺便说一句,如果您尝试修改条形图中的轴(例如随机森林或 GBM 中的变量重要性图),您需要使用 cex.names(如果您是人类直立阅读的人,你可能还想要las=2)【参考方案3】:

请注意,“cex”在使用文本制作情节时确实会改变一些事情。例如,凝聚层次聚类的图:

library(cluster)
data(votes.repub)
agn1 <- agnes(votes.repub, metric = "manhattan", stand = TRUE)
plot(agn1, which.plots=2)

将生成一个带有正常大小文本的图:

plot(agn1, which.plots=2, cex=0.5) 会生成这个:

【讨论】:

也在faces2工作(来自Chernoff faces) 在我的示例中,我必须应用 cex not 直接绘制内部对象以产生效果:plot(ci(roc(data$a, data$b, auc=TRUE, of="auc", print.auc=TRUE, print.auc.cex=1.5, plot=TRUE), of="thresholds", thresholds="best")))【参考方案4】:

通过反复试验,我确定设置字体大小需要以下内容:

    cexhist() 中不起作用。使用cex.axis 作为坐标轴上的数字,使用cex.lab 作为标签。 cexaxis() 中也不起作用。使用cex.axis 作为坐标轴上的数字。 代替使用hist() 设置标签,您可以使用mtext() 设置它们。您可以使用cex 设置字体大小,但是使用值1 实际上会将字体设置为默认值的1.5 倍!!!您需要使用cex=2/3 来获取默认字体大小。至少,在 Mac OS X 的 R 3.0.2 下是这种情况,使用 PDF 输出。 您可以在pdf() 中使用pointsize 更改PDF 输出的默认字体大小。

我认为期望 R (a)实际执行其文档中所说的应该执行的操作,(b)以预期的方式运行,这太合乎逻辑了。

【讨论】:

【参考方案5】:

当我想使轴标签更小时遇到这个问题,但其他所有内容都保持相同大小。对我有用的命令是:

par(cex.axis=0.5)

在 plot 命令之前。只要记住放:

par(cex.axis=1.0)

绘图后确保字体恢复到默认大小。

【讨论】:

【参考方案6】:

如果你想在设置labels=TRUE时增加直方图标签的字体

bp=hist(values, labels = FALSE, 
 main='Histogram',
 xlab='xlab',ylab='ylab',  cex.main=2, cex.lab=2,cex.axis=2)

text(x=bp$mids, y=bp$counts, labels=bp$counts ,cex=2,pos=3)

【讨论】:

【参考方案7】:

为了完整起见,使用 cex = 1.5 将文本缩放 150%,这是一个完整的解决方案:

cex <- 1.5
par(cex.lab=cex, cex.axis=cex, cex.main=cex)
plot(...)
par(cex.lab=1, cex.axis=1, cex.main=1)

我建议包装这样的东西以减少样板,例如:

plot_cex <- function(x, y, cex=1.5, ...) 
  par(cex.lab=cex, cex.axis=cex, cex.main=cex)
  plot(x, y, ...)
  par(cex.lab=1, cex.axis=1, cex.main=1)
  invisible(0)

然后你可以像这样使用它:

plot_cex(x=1:5, y=rnorm(5), cex=1.3)

... 在 R 中称为省略号,用于将附加参数传递给函数。因此,它们通常用于绘图。因此,以下工作按预期工作:

plot_cex(x=1:5, y=rnorm(5), cex=1.5, ylim=c(-0.5,0.5))

【讨论】:

【参考方案8】:

或者,您可以使用图形设备的 res 参数更改保存图像的分辨率:

png(file = "myplot1.png",  bg = "transparent", res = 100)   
plot(1:10)                                                  
dev.off()                                                   

png(file = "myplot2.png", bg = "transparent", res = 200)    
plot(1:10)                                                  
dev.off()                                                   

这将保持相同的图像大小(以像素为单位),但会改变绘图的纵横比,包括字体大小。

【讨论】:

以上是关于如何在 R 中增加绘图中的字体大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用R中的绘图功能更改散点图中x轴和y轴标签的字体大小和颜色?

如何在绘图中指定字体大小(用于 PDF 输出)?

R语言ggplot2绘图设置X轴刻度,字体大小及绘图区大小

在 R 中更改图形的字体

增加 matplotlib 字符串字体大小

如何使用 PyQtgraph 更改绘图的刻度字体大小