2009-10-09 2 views
2

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

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

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

    . temperatur 
    x car sale 

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

ответ

5

Я не эксперт по этому вопросу, но это мое понимая, что это возможно с помощью решетки, но не с ggplot2. See this leanr blog post для примера участка вторичной оси. Also see Hadley's response to this question.

Вот пример того, как сделать это в решетке (от 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() 
+0

Хорошо, я вижу, что она полностью не поддерживается (или, то есть, что вы должны выполнить несколько уловок, чтобы заставить его работать). Я бы сказал, что то же самое относится к решетке, где вещи нужно было масштабировать вручную (не то, что я искал). – Thomas

6

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

alt text

+0

Я думаю, что это хороший момент. То, что я искал, это быстрый способ получить сюжет, а не способ получить качественный сюжет. Думаю, было бы лучше использовать некоторое общее масштабирование. Моя единственная проблема заключается в том, что это масштабирование, по-видимому, требует взаимодействия с человеком; Я, скорее всего, должен будет принять решение об этом масштабировании от случая к случаю. – Thomas

Смежные вопросы