我想要一个主面板,其较小的面板大约是其下方主面板高度的1/6。这是典型的设置,用于在库存图表中显示价格历史记录以及一些技术指标(例如MACD)。 我不确定MACD是否会显示在下面,如果没有显示,请单击指示器并添加MACD
答案 0 :(得分:1)
这绝对是layout
的工作。请注意,它的同伴par(mfrow=...)
(和mfcol
)实际上(如果不是真的)使用与layout
相同的机制,但是布局允许图形的“构面”之间的绘图顺序和尺寸不同。情节。
一些随机数据:
set.seed(2)
n <- 1e4
somedat <- data.frame(x = seq_len(n), y = cumsum(rnorm(1e4)))
somedat$ydot <- smooth(c(0, diff(somedat$y)))
plot(y~x, data=somedat)
layout
在矩阵上工作,其中“ 0”个元素为死空间(未使用),编号的空格必须从1开始并以1递增,但是这些数字可以占用一个以上的单元格(只要它们是相邻且矩形的)。例如:
m <- matrix(c(1, 0,
1, 3,
2, 3), byrow = TRUE, nrow = 3)
heights <- c(4, 1, 1)
widths <- c(3, 1)
layout(m, widths=widths, heights=heights)
layout.show(n=3) # only during dev, it "consumes" the plot so should not be used in production
最后一条命令仅在布局设计期间,并且为每个编号区域绘制一个框架。它应该显示如下内容:
(这里的3的右边界似乎被裁剪了……这一定是我将复制/粘贴到SO的图/ imgur东西中的人工产物。在这里。)
一旦我们调用第一个layout
命令,每个图将填充该图的当前部分。使用layout
时,通常需要严格控制par(mar=...)
,部分是出于美观目的,部分是为了避免错误。当您进行绘图时,您会知道后者,并且抱怨figure margins too large
,在这种情况下,请更改比例或增加窗口的整体绘图大小。
要控制的另一件事是轴。也就是说,如果堆叠在顶部和底部的两个图共享相同的x轴(或暗示),则需要控制轴以确保它们在预期的比例尺上。在此示例中是学术性的,但出于完整性考虑,我将其包括在内。
xlim <- range(somedat$x) # little redundant here, but mostly for good practice
layout(m, widths=widths, heights=heights)
# plot 1
par(mar = c(0.1, 4, 4, 2) + 0.1)
plot(y ~ x, data = somedat, type = "l",
main = "Plot title",
xlim = xlim, axes = FALSE, frame.plot = TRUE)
axis(2)
# plot 2
par(mar = c(2, 4, 0.1, 2) + 0.1)
plot(ydot ~ x, data = somedat, type = "p",
pch = 16, cex = 0.2, xlim = xlim, ann = FALSE)
# plot 3
plot(NA, xlim = 0:1, ylim = 0:1, ann = FALSE)
text(0.5, 0.5, "hello world!")
每个图区都重复使用前一个图区的par(mar=)
,可以看出,图3在图下方(第1面)具有相同的缩短区域。
要显示更多的暴力多部分情节,可以超越理智:
m <- matrix(
c(1, 1, 1, 1, 7,
1, 1, 1, 1, 7,
1, 1, 1, 1, 0,
1, 1, 1, 1, 4,
5, 5, 5, 2, 3,
5, 5, 5, 6, 6),
byrow = TRUE, nrow = 6)
layout(m)
layout.show(n=7)
(同样是右边界...)