Несколько точек данных на одном графике R ggplot2 - PullRequest
2 голосов
/ 09 октября 2009

У меня есть два набора точек данных, которые относятся к одной и той же первичной оси, но отличаются по вторичной оси. Есть ли какой-нибудь способ нанести их друг на друга в R, используя ggplot2?

То, что я ищу, в основном выглядит примерно так:

4+           |
 | x       . + 220
3+     . .   |
 |   x       |
2+   .       + 210
 |     x     |
1+ .     x x |
 |           + 200
0+-+-+-+-+-+-+
     time   

   . temperatur
   x car sale

(это только пример возможных данных)

Ответы [ 2 ]

6 голосов
/ 09 октября 2009

Ответ Шейна «Вы не можете в ggplot2» верен, если он неполон. Возможно, это не то, что вы хотите сделать. Как вы решаете, как масштабировать ось Y? Вы хотите, чтобы средства линий были одинаковыми? Диапазон? Нет принципиального способа сделать это, и слишком легко сделать результаты похожими на все, что вы хотите, чтобы они выглядели. Вместо этого, возможно, вы захотите сделать, особенно в таких временных рядах, чтобы нормировать две строки данных так, чтобы при определенном значении t, часто min (t), Y1 = Y2 = 100. Вот пример Я вытащил Bonddad Blog (не использую ggplot2, поэтому он уродлив!) Но вы можете четко определить относительное увеличение и уменьшение двух строк, которые имеют совершенно разные базовые шкалы.

alt text

5 голосов
/ 09 октября 2009

Я не эксперт в этом, но я понимаю, что это возможно с решеткой, но не с ggplot2. См. Этот пост в блоге поста для примера графика второй оси. Также см. Ответ Хэдли на этот вопрос .

Вот пример того, как это сделать в решетке (из Габор Гротендик ):

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...