如何在R中绘制具有相同X轴的两个图表?

3
4个回答

7
使用其他人提到的经济数据集,一个不错的baseR解决方案可能是。
layout(matrix(1:2, ncol = 1), widths = 1, heights = c(2,1.5), respect = FALSE)
par(mar = c(0, 4.1, 4.1, 2.1))
with(economics, plot(unemploy~date, type = 'l', xaxt = 'n', main = 'My Great Graph'))
par(mar = c(4.1, 4.1, 0, 2.1))
with(economics, plot(pop~date, type = 'l'))

我的伟大图表

请注意,由于您明确地制作了两个图形而不必使用数据在因素上分割的函数,因此您无需重新整理数据。 此外,这两个图形可以是几乎任何东西...例如第二个可以是直方图。 此外,您会注意到,在此代码中,您可以轻松设置相对高度。

(与 ggplot2 解决方案相比,此代码执行速度快得多...如果这很重要...如实时更新网站或其他一些情况,或者您有大量数据或需要制作许多这些图形)


2

基本思路是将数据集融合,以便您在单个列中拥有要在y轴上绘制的变量的值,并使用第二列区分来源。例如:

data("economics")
dat.m <- melt(economics, measure.vars=c("pop", "unemploy"))

然后使用facet_grid在单独的面板中绘制每个变量:
ggplot(dat.m, aes(x=date, y=value)) + geom_line() + facet_grid(variable~., scales="free_y")

1
雅虎财经图表通常是交互式的,您可以移动时间窗口和其他功能。要获得类似的交互效果,我建议使用googleVis包。这些图是针对Web浏览器制作的,因此您可以与它们交互。请尝试:

install.packages("googleVis");library(googleVis);demo(googleVis)

第八个弹出的图表是时间序列图。 但这不是ggplot。


0
Ista提出的使用ggplot2的策略也可以使用lattice包来实现。使用相同的数据:
data("economics")
dat.m <- melt(economics, measure.vars=c("pop", "unemploy"))

然后我们使用xyplot,通过layout指定两行一列,并使用scales参数强制分开y轴刻度:
xyplot(value~date|variable,data = dat.m, 
    panel = "panel.lines", layout = c(1,2),
    scales = list(y = list(relation = "free")))

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接