如何在R的主图表下显示指标图

时间:2018-11-16 14:42:06

标签: r plot

我想要一个主面板,其较小的面板大约是其下方主面板高度的1/6。这是典型的设置,用于在库存图表中显示价格历史记录以及一些技术指标(例如MACD)。 我不确定MACD是否会显示在下面,如果没有显示,请单击指示器并添加MACD

TSLA with MACD

enter image description here

1 个答案:

答案 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

最后一条命令仅在布局设计期间,并且为每个编号区域绘制一个框架。它应该显示如下内容:

layout frame

(这里的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!")

layout example plot

每个图区都重复使用前一个图区的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)

(同样是右边界...)

insane layout demo