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

199

我很困惑,如何正确地增加绘图中标题、标签和其他位置文本的字体大小?

例如:

x <- rnorm(100)
hist(x, xlim=range(x), xlab= "Variable Label", 
     ylab="density", main="Title of plot", prob=TRUE, ps=30)
< p > ps参数不会改变字体大小(但在R帮助文档< code>?par中说明,它是用于“文本的点大小(但不包括符号)”)。 < /p >< p >此外,是否有可能将更改字体大小与绘图函数(例如< code>hist)分开?< /p >

可能是如何更改R绘图标签大小的重复问题。 - Waldir Leoncio
9个回答

185
你想要像cex=1.5参数这样来缩放字体到150%。但是请注意查看help(par),因为还有cex.labcex.axis等参数。

1
谢谢!“ps=1.5”有什么区别? - Tim
6
为什么 cex=1.5 无效?但是必须针对 cex.lab、cex.axis 和 cex.main 中的每个部分进行指定?cex=1.5 的作用是什么? - Tim
2
你有读过 help(par) 关于 ps 的内容吗?据我所知,这似乎与文本无关。 - Dirk Eddelbuettel
2
这就是事实,部分原因当然是为了向后兼容S语言之前的实现。 - Dirk Eddelbuettel
3
cex是放大倍数。默认值为1。如果您需要指定字体大小,则最好准备好深入阅读文档,从?Devices,?pdfFonts,?pdf,?embedFonts等开始,并查看其他许多相关内容。 - IRTFM
显示剩余2条评论

152
因此,总结现有的讨论,将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)

在此输入图片描述


3
顺便说一下,如果您想修改条形图中的坐标轴(比如在随机森林或GBM中的变量重要性图中),则需要使用 cex.names(如果您是站直身体阅读内容的人,您可能还需要使用 las=2)。 - geneorama
1
@geneorama 谢谢!!你的评论让我节省了很多时间。 - Daniel Schütte

27

通过不断的尝试和错误,我已经确定设置字体大小所需的以下内容:

  1. cexhist() 中无效。使用 cex.axis 来设置轴上的数字,使用 cex.lab 来设置标签。
  2. cexaxis() 中也无效。使用 cex.axis 来设置轴上的数字。
  3. 可以使用 mtext() 来设置标签,而不是使用 hist()。你可以使用 cex 来设置字体大小,但是使用值为1实际上会将字体设置为默认值的1.5倍!!! 你需要使用 cex=2/3 来获得默认字体大小。至少在Mac OS X下的R 3.0.2中使用PDF输出,是这样的。
  4. 你可以使用 pdf() 中的 pointsize 来更改PDF输出的默认字体大小。

我想期望R (a) 真正做到它的文档说过的事情,(b) 表现出符合预期的行为,可能太过理想化了。


22

请注意,当使用文本绘制图形时,"cex"确实会改变一些东西。例如,聚类分析的凝聚层次聚类图:

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

将生成一个正常大小文字的图:

enter image description here

plot(agn1, which.plots=2, cex=0.5)将生成以下图形:

enter image description here


也可以在 faces2 中工作(来自 Chernoff faces - Galled
在我的例子中,我不得不直接将_cex_ 应用于内部对象而不是绘图本身以产生效果: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"))) - Tapper

7

当我想要缩小坐标轴标签,但保持其他内容相同大小时,我遇到了这个问题。对我有效的命令是:

par(cex.axis=0.5)

在绘图命令之前,记得要添加以下内容:
par(cex.axis=1.0)

在完成绘图后,请确保字体大小恢复为默认大小。


4
如果您想在设置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)

3

为了完整起见,使用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))

1

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

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

plot 1

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

plot2

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

1

举个简单的例子,我在图表上使用cex改变了几个字体大小,包括使用line命令在图表内添加副标题。

par(cex=1, cex.main=2, cex.lab = 1.5, cex.sub=0.8)
plot(gam_d13C_year, residuals = TRUE, pch = 1, mar=c(8, 2, 2, 2) + 1, bty="n")
title(main = TeX('Effect of year in $\\delta ^{13}C$'))
title(sub =paste(gam_d13C_year_stats),line = -2, adj = 0.5)

Change size of font in graph with R


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接