График R, касание оси x и оси y

Моя проблема касается создания графика для публикации в 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. К сожалению, мне пока не разрешено размещать изображения.

Однако, желая избавиться от коробки, я использовал «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 соприкасаться друг с другом?


person Marnix de Zeeuw    schedule 03.06.2012    source источник


Ответы (3)


Скорее всего, установка 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))
person Roland    schedule 04.06.2012

Попробуйте box(bty='L') нарисовать только левую и нижнюю части коробки. Вы также можете просто нарисовать линии самостоятельно, используя lines, segments или abline и используя функции grconvertX и grconvertY, чтобы найти места, где нужно рисовать линии.

person Greg Snow    schedule 04.06.2012

Я предлагаю вам следовать описанной вами процедуре, а затем использовать:

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.

person lord.garbage    schedule 24.10.2014