1
長時間閱讀器;第一次在這裏發佈海報。我發佈是因爲我試圖用自定義軸創建多面板3維圖,而且我似乎無法切割軸標籤。在R中調整persp/persp3d的邊距
更具體地說,我試圖在plot3D
包中使用persp3D()
創建一個圖。這是一個使用persp()
的函數。很容易設置persp(..., axes = F)
關閉軸。從那裏,如persp()
,我可以使用trans3d()
添加行,文本等,如其他地方所示(例如,link)。添加座標軸和座標軸標籤可以很好地工作,但我無法弄清楚如何增加邊距以適應我添加到圖中的座標軸標籤。
這裏是一個重複的例子:
par(mfrow = c(1,3))
# fake data
test.mat <- matrix(runif(100)*1:10, nrow = 10)
# describe axis parameters
x.axis <- seq(from = 0, to = 1, by = .1)
min.x <- min(x.axis); max.x <- max(x.axis)
y.axis <- seq(from = 0, to = 1, by = .1)
min.y <- min(y.axis); max.y <- max(y.axis)
z.axis <- pretty(seq(from = min(test.mat), to = max(test.mat), by = 0.1))
min.z <- min(z.axis); max.z <- max(z.axis)
# 3d plot without axes
pmatt <- persp(test.mat, box = F, theta = 35, axes = F, xaxs = "i")
# just a little function for plotting the axes
bbox <- function(min.x, max.x, min.y, max.y, min.z, max.z, pmat, ...){
lines(trans3d(min.x, min.y, c(min.z, max.z), pmat), ...)
lines(trans3d(min.x, max.y, c(min.z, max.z), pmat), ...)
lines(trans3d(max.x, max.y, c(min.z, max.z), pmat), ...)
lines(trans3d(c(min.x, max.x), max.y, max.z, pmat), ...)
lines(trans3d(min.x, c(min.y, max.y), max.z, pmat), ...)
}
# print axes
bbox(min.x, max.x, min.y, max.y, min.z, max.z, pmat = pmatt)
# create ticks and labels, and place them with trans3d
tick.start <- trans3d(x.axis, min.y, min.z, pmatt)
tick.end <- trans3d(x.axis, (min.y - 0.10), min.z, pmatt)
segments(tick.start$x, tick.start$y, tick.end$x, tick.end$y)
label.pos <- trans3d(x.axis[], (min.y - 0.15), min.z, pmatt)
text(label.pos$x, label.pos$y, labels = c(x.axis), adj = c(1, 0.95), srt = 0, cex = 1)
tick.start <- trans3d(max.x, y.axis, min.z, pmatt)
tick.end <- trans3d((max.x + 0.1), y.axis, min.z, pmatt)
segments(tick.start$x, tick.start$y, tick.end$x, tick.end$y)
label.pos <- trans3d((max.x + 0.15), y.axis, min.z, pmatt)
text(label.pos$x, label.pos$y, labels = c(x.axis), adj = c(0, 0.95), srt = 0, cex = 1)
tick.start <- trans3d(min.x, min.y, z.axis, pmatt)
tick.end <- trans3d(min.x, (min.y - 0.1), z.axis, pmatt)
segments(tick.start$x, tick.start$y, tick.end$x, tick.end$y)
label.pos <- trans3d((min.x - 0.15), min.y, z.axis[-1], pmatt)
text(label.pos$x, label.pos$y, labels = z.axis[-1], adj = c(1.5, NA), srt = 0, cex = 1)
而且,在所有的標籤是由富餘切斷。任何幫助將不勝感激。
從我所知道的情況來看,無論圖形設備窗口的大小或尺寸如何,z軸(垂直軸)都將被截斷。那是我要去的那個。謝謝。 – ChRis