我的问题涉及为R中的出版物制作图表。我使用了如下的绘图函数:
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轴相互接触?
答案 0 :(得分: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))
答案 1 :(得分:5)
尝试box(bty='L')
仅绘制框的左下部分。您也可以使用lines
,segments
或abline
并使用grconvertX
和grconvertY
函数自行绘制线条以查找绘制线条的位置
答案 2 :(得分:1)
我建议您按照您概述的程序进行操作,然后使用:
box(which = "plot", bty = "l")
e.g:
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 = 1
传递给单独的axis()
来电,以防止轴的某些部分比轴的其他部分显得更胖,因为有些部分会被覆盖致电box()
,有些则不然。
我认为最后使用box()
的解决方案更为通用,因为您可以在例如您不能或不想在bty = "l"
或plot.default
来电中传递plot.window
。