Построение двойной оси у, когда длины х и у различаются - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть два больших набора данных, которые я прочитал в R. Для простоты рассмотрим следующее:

##Data set 1
x = c("2005", "2006", "2007", "2008", "2009", "2010")
y = c(1,2,4,6,4,3)

##Data set 2
##Shorter than D2. Missing 2005
x1 = c( "2006", "2007", "2008", "2009", "2010")
y1 = c(20,40,60,50,29)

Я хочу построить оба набора данных в виде линейных графиков с двойной осью Y. В идеале построение графики должно выглядеть так:

plot(x, y, type = "o", col = "red")
par(new = TRUE)
plot(x, y1, type = "o", col = "blue", 
     xaxt = "n", yaxt = "n", xlab = "", ylab = "")
axis(4)

Но, конечно, x any y1 не одного размера, поэтому я получаю сообщение об ошибке. Я пробовал

plot(x1, y1, type = "o", col = "blue", 
     xaxt = "n", yaxt = "n", xlab = "", ylab = "")

но тогда y1 просто растягивается, чтобы покрыть всю длину.

В этом простом случае я мог бы просто добавить пустую строку Y1, чтобы покрыть недостающие данные 2005 года, но это не практичное решение в моих реальных данных. Могу ли я в любом случае сказать R, чтобы они совместили два набора данных соответственно?

Кроме того, я бы предпочел использовать gplots, потому что мне нравится простая возможность компенсировать мои ошибки. Код может выглядеть примерно так

SE = c(.20,.40,.60,.50,.29)
SE1 = c(.20,.40,.60,.50,.29)
offset = .08

plotCI(x = x, y = y, uiw = SE, type = "o",col = "red")
par(new = TRUE)
plotCI(x = (x1) + offset, y = y1, type = "o", uiw = SE1, col = "blue",         
       xaxt = "n", yaxt = "n", xlab = "", ylab = "")
axis(4)

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

ОК, вы можете сделать это, если у вас есть математическое соотношение между вашими двумя диапазонами значений.Как только вы знаете, что это такое, вы можете сделать сюжет.Но имейте в виду, что на графике ледяных щитов вы указываете, что обе эти оси относятся к точно таким же данным.На самом деле не очень полезно использовать эти две оси ... вероятно, должна быть только одна.Они запутывают разницу между количеством льда в марте и сентябре.Вам нужно действительно хорошее обоснование, чтобы делать то, что вы планируете.

Может быть, у вас есть хорошее обоснование для этого (хотя я не могу придумать ни одного).Если нет, это ужасная идея.Вот как бы вы это сделали ...

plot(x, y*10, type = 'l', ylim = range(c(y*10,y1)), yaxt = 'n', col = 'red')
axis(2, (1:6)*10, 1:6, col = 'red')
lines(x1, y1, col = 'blue')
axis(4, (1:6)*10, col = 'blue')
grid(nx = NA, ny = NULL)

Вы можете установить col.axis, чтобы установить цвета чисел.

(Пример показанного ледяного щита, вероятно, делает то жевещь как это .. вычитая 8 вместо умножения на 10.)

1 голос
/ 16 ноября 2011

Я был бы рад услышать, что говорят другие, но кто-то еще разделял идею использования

xlim=range(Data1$Year,Data2$Year) 

во второй команде plot, и это, кажется, исправляет это очень хорошо. Спасибо всем за помощь!

0 голосов
/ 16 ноября 2011

Вы можете использовать points(), чтобы добавить точки или линии к существующему графику:

plot(x,y,type="o",col="red")
points(x1,y1,type="o",col="blue")

Тогда вам просто нужно добавить по второй оси.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...