2

我有两组数据点,它们都与相同的主轴相关,但在次轴上有所不同。有没有办法使用ggplot2在R中将它们相互绘制?

我正在寻找的基本上是这样的:

4+ |
 | X 。+ 220
3+。. |
 | x |
2+。+ 210
 | x |
1+。XX |
 | + 200
0+-+-+-+-+-+-+
     时间   

   . 温度
   x 汽车销售

(这只是可能数据的一个例子)

4

2 回答 2

6

Shane 的回答“你不能在 ggplot2 中”是正确的,如果不完整的话。可以说,这不是你想做的事情。你如何决定如何缩放 Y 轴?您希望线条的方式相同吗?范围?没有原则性的方法,而且很容易让结果看起来像你想要的任何东西。相反,您可能想要做的,尤其是在这样的时间序列中,是对两行数据进行规范化,以便在特定的 t 值下,通常是 min(t),Y1 = Y2 = 100。这是一个例子我退出了Bonddad 博客(不使用 ggplot2,这就是它难看的原因!)但是你可以清楚地分辨出两条线的相对增加和减少,它们具有完全不同的基本比例。

替代文字

于 2009-10-09T18:45:10.450 回答
5

我不是这方面的专家,但据我了解,这对于 lattice 是可能的,但对于 ggplot2 是不可能的。 有关辅助轴图的示例, 请参阅此更精简的博客文章。另请参阅 Hadley 对此问题的回复

这是一个如何在 lattice 中执行此操作的示例(来自Gabor Grothendieck):

library(lattice)
library(grid)  # needed for grid.text

# data

Lines.raw <- "Date  Fo  Co
6/27/2007  57.1  13.9
6/28/2007  57.7  14.3
6/29/2007  57.8  14.3
6/30/2007  57  13.9
7/1/2007  57.1  13.9
7/2/2007  57.2  14.0
7/3/2007  57.3  14.1
7/4/2007  57.6  14.2
7/5/2007  58  14.4
7/6/2007  58.1  14.5
7/7/2007  58.2  14.6
7/8/2007  58.4  14.7
7/9/2007    58.7 14.8
"

# in reality next stmt would be DF <- read.table("myfile.dat", header = TRUE)
DF <- read.table(textConnection(Lines.raw), header = TRUE)
DF$Date <- as.Date(DF$Date, "%m/%d/%Y")

par.settings <- list(
        layout.widths = list(left.padding = 10, right.padding = 10),
        layout.heights = list(bottom.padding = 10, top.padding = 10)
)

xyplot(Co ~ Date, DF, default.scales = list(y = list(relation = "free")),
        ylab = "C", par.settings = par.settings)

trellis.focus("panel", 1, 1, clip.off = TRUE)
  pr <- pretty(DF$Fo)
  at <- 5/9 * (pr - 32)
  panel.axis("right", at = at, lab = pr, outside = TRUE)
  grid.text("F", x = 1.1, rot = 90) # right y axis label
trellis.unfocus()
于 2009-10-09T18:27:21.577 回答