如何减小x轴上两个离散值之间的间距?

时间:2014-05-02 00:14:00

标签: r

首先,我想在没有ggplot的情况下这样做。

我有一个盒子图的脚本:

data <- data.frame(
  u    = c(0.522, 0.488, 0.474, 0.443, 0.510, 0.443, 0.420, 0.554, 0.333, 0.414,
           0.467, 0.606, 0.588),
  ub   = c(0.594, 0.568, 0.578, 0.523, 0.577, 0.501, 0.522, 0.623, 0.498, 0.511,
           0.544, 0.654, 0.639),
  nu   = c(0.646, 0.620, 0.644, 0.607, 0.667, 0.614, 0.631, 0.701, 0.586, 0.589,
           0.664, 0.739, 0.744),
  nub  = c(0.733, 0.701, 0.700, 0.698, 0.724, 0.701, 0.722, 0.777, 0.630, 0.663,
           0.703, 0.78, 0.787),
  wnub = c(0.815, 0.782, 0.757, 0.764, 0.792, 0.771, 0.838, 0.860, 0.700, 0.703,
           0.774, 0.837, 0.863))
boxplot(data, las=1, par(mar=c(7.5, 4.2, 0.25, 0.15)), axes=FALSE, xlab=NA,
        ylab=NA, boxwex=.4, outline=FALSE, ylim=c(0:1))
box()
labnames = c("Unigrams",
             "Unigrams\n& Bigrams",
             "Noun Unigrams",
             "Noun Unigrams\n& Noun Bigrams",
             "Noun Unigrams\n& Noun Bigrams\n(positional weights)")
axis(side=1, tck=-0.025, labels=FALSE)
axis(side=1, lwd=0, labels=FALSE, at=c(1:5), cex.axis=1)
text(seq(1, 5, by=1), par("usr")[3]-.2, labels=labnames, srt=-90,
     xpd=TRUE, adj=.25)
axis(side=2, tck=-0.02, labels=NA)
axis(side=2, lwd=0, cex.axis=1, las=1)
mtext(side=1, "Feature Sets", line=6.5, cex=1.5)
mtext(side=2, "F-Score", line=3, cex=1.5)

产生下图:

boxplot

我对这浪费的空白数量感到恼火。我一直试图减少空间的一种方法是通过使用“asp”将离散的x轴值更接近,但它不会改变任何东西。我怎么能这样做,以减少盒子之间的巨大差距?

此外,如果还有其他方法可以减少此图片中的空白,请分享您的想法。

3 个答案:

答案 0 :(得分:4)

选项1:如果您要将图片保存为Latex的PDF格式,则可以使用pdf(file=file, width=width, height=height)设置宽度和高度。然后,您可以完全忽略boxwex参数。

选项2 或者,您可以使用at参数告诉boxplot X轴应放置框的位置:

at.x <- seq(1,by=.5,length.out=5) # set here the X-axis positions
boxplot(data, par(mar=c(8.5, 4.2, 0.25, 0.15)), outline=FALSE,
        cex.lab=1.5, ylab="F-score", xlab=NA, las=3, names=labnames,
        boxwex=.4, ylim=c(0:1),
        at=at.x)
# display the X-axis name
mtext(side=1, "Feature Sets", line=7.2, cex=1.5)

看到代码也大大简化了。您可以进一步使用xlim参数boxplot来减少绘图的内边距。试试xlim=c(0.8,3.2)。结果:

enter image description here

选项3 如果您真的正在寻求节省空间,您可以使用颜色和图例:

cols <- c("white","red","yellow","green","blue")
boxplot(data, par(mar=c(0.2, 3.2, 0.25, 0.15)), outline=FALSE,
        axes=F, ylab=NA, xlab=NA, names=NA, col=cols)
box()
axis(2)
mtext(side=2,"F-score",line=2.2)
legend("bottomright", cex=.8, fill=cols,
       c("Unigrams", "Unigrams & Bigrams", "Noun Unigrams",
         "Noun Unigrams & Noun Bigrams",
         "Noun Unigrams & Noun Bigrams (positional weights)"))

enter image description here

最后,为什么要将Y轴的极限设置为0和1?那就是在那里浪费了很多空间。另外,为什么删除异常值?只是自己问一下IR研究员: - )

答案 1 :(得分:1)

现在,您通过设置boxwex = .4参数来增加框之间的空间。将其设置为boxwex = .8将使箱图更宽并减少空白。

或者,如果您有兴趣将白色空间“移动”到绘图的边缘而不是框之间,则可以显式设置xlim =参数。默认情况下,由于您有5个组,因此它们绘制在1,2,3,4,5,默认值为xlim = c(.5,5.5)。您可以设置xlim = c(0,6)或xlim = c(-1,7),这将绘制更宽的数据范围,btu您的数据将移动到更靠近中心。如果你这样做,你也会想要注释axis(side=1, lwd=0, labels=FALSE, at=c(1:5), cex.axis=1),因为这可能会产生额外的刻度线(我不知道为什么它会在那里出现)。

答案 2 :(得分:1)

预先做好两件事:

  • boxwex=0.4正在水平缩小方框。

  • ylim=c(0,1)垂直打开空间(我不认为是垂直的 空白本身就是一个问题。

boxwex的水平空白量是成比例的 如果您创建640像素或6400像素宽的图像,则boxwex为 仍然给你40%的横向覆盖率(默认为80%)。 无论如何,boxplot将扩展到整个宽度 这个数字。

@AndreSilva开始使用一种技术。jpeg()(和png()pdf()svg()),您可以指定捕获的维度 图片。对于jpegpngwidthheight的单位都在 像素;我发现72 dpi的默认分辨率有点棘手, 所以知道你可以改变res。请注意,这将影响如何 字体也适合,而不仅仅是使线条看起来不那么棘手。 (顺便说一句:除非你包括在内,否则我通常建议反对jpeg() 大量的颜色和/或覆盖实际图像,但YMMV。)

除非您确实需要设置特定的宽高比,否则请使用asp 真的只能让你知道宽度之间的比例 和身高,根据我的经验。然而,即使在R-studio中,你也可以 更改图表的外观尺寸以更好地了解 渲染/捕获图像的样子。

如果你真的想要提高空间效率,你可以 使x轴标签更靠近盒子。你可以放置 他们(如此处所示)全部排成一行(我的首选),或者可选地(带有 我在下面的注释掉的行中将每个文本放在它们各自的下面 框。

par(mar=c(3,4.5,0,0)+0.1)
bp <- boxplot(data, names=NA, ylim=c(0,1), axes=FALSE,
              outline=FALSE, cex.lab=1.5, col='#55ff55')
axis(2, las=1)
#text(1:5, bp$stats[1,] - 0.05, labnames, srt=-90, xpd=TRUE, adj=c(0,0.5))
text(1:5, rep(0.3,5), labnames, srt=-90, xpd=TRUE, adj=c(0,0.5))
mtext('Feature Sets', side=1, line=2, at=0.5, adj=0, cex=1.5)
mtext('F-Score', side=2, line=2.5, at=0, adj=0, cex=1.5)
savePlot(file='Rplot.png', type='png', res=150)

此时,许多调整点都是个人的 喜欢他们是Tufte-ian。 (我还会考虑其他的事情 正在col调用boxplot的方框中添加颜色 他们从白色背景中脱颖而出。)

Rplot, 625x357