Несколько точек данных на одном графике R ggplot2

StackOverflow https://stackoverflow.com/questions/1545302

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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

   . temperatur
   x car sale

(Это всего лишь пример возможных данных)

Это было полезно?

Решение

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

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

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()

Другие советы

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

alt text

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top