2012-06-03 141 views
6

我的问题涉及的曲线图的制作中R.出版物我已经使用了绘图功能等如下:ř情节,x轴和y轴触摸

plot(x=data$SL, y=data$BD, xlab = "SL (mm)", ylab = "BD (mm)", pch=data$pch) 

SL的范围从51.7至73.7和BD从13.5到20.4。不幸的是,我不允许发布图像。

但是,想摆脱我使用“轴= F”的框。现在的问题是缺乏对轴功能的控制。我用:

axis(side=1, lwd=3, xpd=TRUE, at=c(min(data$SL):max(data$SL))) 
axis(side=2, lwd=3, xpd=TRUE, at=c(min(data$BD):max(data$BD))) 

问题是,我不能设法得到Y轴和X轴在同一点走到一起作为与盒子的情节。如何让x轴和y轴相互接触?

回答

3

最有可能设置xaxs =“我”和yaxs =“我”将帮助您获得所需的行为。

plot(c(1,2,3),c(2,4,6),axes=F,xaxs = "i",yaxs="i",xlim=c(0,3),ylim=c(0,6)) 
axis(side=1, lwd=3, xpd=TRUE, at=0:3) 
axis(side=2, lwd=3, xpd=TRUE, at=seq(0,6,2)) 
5

尝试box(bty='L')只绘制框的左侧和底部部分。您也可以使用lines,segmentsabline以及使用grconvertXgrconvertY函数自己绘制线,以查找绘制线的位置。

+1

完美,将'bty ​​=“L”'传递给'plot()'为我工作。 – thomasfedb

1

我建议您按照您列出的程序,然后使用:

box(which = "plot", bty = "l")

如:

plot.new() 
plot.window(xlim = c(1, 18), ylim = c(2, 20)) 
points(1:18, 2:19, pch = 1, col = "#FF7F24", cex = 1.2) 
lines(1:18, 2:19, col = "#FF7F24", lwd = 2) 
axis(side  = 1, 
    lwd  = 0, 
    lwd.ticks = 1, 
    at  = 1:18, 
    cex.axis = 0.9) 
title(main = "Plot", 
     ylab = "Y-Axis") 
legend("top", 
     legend = c("Legend"), 
     col = c("#FF7F24"), 
     text.col = c("#FF7F24"), 
     pch = 1, 
     bty = "n", 
     cex = 1.2) 
axis(side  = 2, 
    lwd  = 0, 
    lwd.ticks = 1) 
box(which = "plot", bty = "l") 

您应该通过选择lwd = 0lwd.ticks = 1您单独axis()通话为了以防止轴的某些部分看起来比轴的其他部分更粗糙,因为有些部分会被您拨打box()的部分覆盖,有些部分会执行n OT。

使用box()最后的解决方案,我认为更一般,因为你可以使用它,你不能或不想通过你的plot.defaultplot.window呼叫bty = "l"