R boxplot中的自动贴合标签

时间:2009-12-08 12:59:43

标签: r boxplot

我们目前正在使用R自动生成各种boxplots

我们遇到的问题是,标签的长度在一个图中的不同图和类之间差别很大。

有没有办法自动调整绘图,以便所有标签都能很好地适应它?

指定最差情况mar是不可行的,因为在某些图中,标签比其他图标短得多。

2 个答案:

答案 0 :(得分:3)

莱迪思是最有可能在这里提供帮助的图形库。我说这有两个原因:(i)格子基于网格系统,通过访问网格的图形基元,您可以更精细地控制面板输出的位置; (ii)还有更多可以使用--R标准图形包有70个不同的参数,而莱迪思有371 - 无论如何我的计数,(长度(名称(unlist(trellis.par.get()))))但是那些371不像它们在基础包中那样是扁平结构,而是采用分层结构(顶层有30个左右的参数组)收集。

您想要的是轴标签的相对位置。对于这类任务,我建议进入一个级别。所以要做你想做的事,只需更改相关的grob槽然后重绘两个grob(使用R交互式提示):

library(lattice)
library(grid)
bwplot(~runif(200, 10, 99), xlab="x-axis label", ylab="y-axis label")
# move the x-axis label to the far left
grid.edit("[.]xlab$", grep=T, x=unit(0, "npc"), just="left", redraw=T)
# move it to the far right
grid.edit("[.]xlab$", grep=T, x=unit(1, "npc"), just="right", redraw=T)
# move it to the center
grid.edit("[.]xlab$", grep=T, x=unit(0.5, "npc"), just="center", redraw=T)
# same for y-axis
grid.edit("[.]ylab$", grep=T, y=unit(0.5, "npc"), just="center", redraw=T)

“[。]。xlab $”,grid.edit接受一个gPath对象(只是一个遍历gTree的路径,它只是一个包含其他grob的grob);因为我不知道gPath中我感兴趣的对象所在的位置(x轴/ y轴标签,我使用了对象的正则表达式形式;

“grep = T”,只是告诉grid.edit将前一个参数视为正则表达式;

“x = unit(0.5,'npc')”,在此处指定视口坐标(在这种情况下,只是x值); 'npc'('标准化父坐标',这是默认值)将视口原点视为(0,0),并为其指定宽度和宽度。每个高度为1个单位。因此,我已经沿x轴指定了视口的中心。

答案 1 :(得分:0)

使用基础绘图系统,快速解决方案可以是使用las=2las=3将x标签旋转为垂直。当然,这也仅适用于标签不是很长的情况,但是超过一定的标签长度​​,无论如何都会遇到任何类型的情节(缩短标签就行了)。

但我同意@doug对于更细粒度的控制,应考虑格子或ggplot2。