6

我的问题涉及为 R 中的出版物制作图表。我使用了如下 plot 函数:

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。不幸的是,我还不允许发布图片。

但是,想摆脱我使用“axes = 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轴相互接触?

4

3 回答 3

5

尝试box(bty='L')仅绘制框的左侧和底部。您也可以使用 、 或 自己绘制线条linessegmentsabline使用grconvertXandgrconvertY函数来查找绘制线条的位置。

于 2012-06-04T15:36:08.300 回答
5

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

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))
于 2012-06-04T11:38:49.130 回答
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 = 0,以防止轴的某些部分看起来比轴的其他部分更胖,因为有些部分会被您的调用覆盖而有些则不会。lwd.ticks = 1axis()box()

我认为,最后使用的解决方案box()更通用,因为您可以在例如您不能或不想传递bty = "l"您的plot.defaultorplot.window呼叫时使用它。

于 2014-10-24T13:08:37.800 回答