代码之家  ›  专栏  ›  技术社区  ›  lhahne

在R盒绘图中自动调整标签

  •  0
  • lhahne  · 技术社区  · 15 年前

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

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

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

    指定最坏情况 mar 不可行,因为在某些地块上,标签比其他地块短得多。

    2 回复  |  直到 9 年前
        1
  •  3
  •   doug    15 年前

    莱迪思是最有可能在这里有用的图形库。我这么说有两个原因:(i)lattice是基于网格系统的,通过访问网格的图形原语,您可以更好地控制面板输出的位置等;和(ii)有更多的工作- R标准图形包有70个不同的参数,而格子有371 -我的计数无论如何,(长度(名称(unList.tRel.PAR.GET()))),但这371不在一个扁平的结构,就像他们是在基础包,而是在层次结构中收集(在顶层有30个左右的参数组)。

    您需要的是轴标签的相对位置。我建议为这类任务降低一个级别。所以,要想做你想做的,只需更改相关的grob槽,然后重新绘制两个grob(使用r interactive提示符):

    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”('normalized parent coordinates',默认值)将视区原点视为(0,0),并为其分配1个单位的宽度和高度。因此,我指定了沿x轴的视区中心。

        2
  •  0
  •   geekoverdose    9 年前

    使用基本绘图系统,一个快速的解决方案是使用 las=2 las=3 . 当然,这也只有当你的标签不是很长,但超过一定的标签长度,你会遇到任何类型的绘图麻烦无论如何(缩短标签将是方法)。

    但是我同意@doug的观点,对于更细粒度的控制,应该考虑使用lattice或ggplot2。