Выравнивание, масштабирование векторов, графики в R - PullRequest
0 голосов
/ 23 мая 2018

У меня есть два фрейма данных, df1 и df2.Каждый представляет кривую.Кривая df1 будет иметь две отмеченные точки.Мне нужно быть в состоянии сделать следующее:

  1. Составьте графики каждого и расположите их вертикально, чтобы они были равномерно совмещены и оба были абсолютно квадратными. Нижняя кривая, df1, будет иметьдве точки отмечены на нем.

  2. Мне нужно выровнять верхний график (df2) так, чтобы точка, отмеченная на кривой, точно совпадала с точкой на нижней кривой, что я проиллюстрировал простым смещениемкривая вправо, добавляя значение смещения (пунктирная красная линия).

  3. Кроме того, я хотел бы иметь возможность изменить масштаб df2, чтобы обе точки, отмеченные на df1, могли совпастьс соответствующими двумя точками на df1.Это будет отдельная операция, необязательная, но все же важная.

Каков наилучший способ програматически изменить масштаб / сдвиг df2 в соответствии с точками на df1?Любая помощь будет принята с благодарностью!Спасибо!

library(gridExtra)
library(ggplot2)

df1 <- data.frame(x = c(0.04, 0.21, 0.35, 0.50, 0.66, 0.81, 0.96, 
1.11, 1.26, 1.41, 1.57, 1.70, 1.85, 2.00, 2.15, 2.31, 2.45, 2.59, 
2.74, 2.89, 3.04),y=c(1.44, 1.34, 1.26, 1.18, 1.09, 0.99, 0.89, 0.80, 
0.70, 0.60, 0.50, 0.42, 0.33, 0.25, 0.17, 0.11, 0.07, 0.06, 0.04, 
0.03, 0.03))

df2 <- data.frame(x = c(3.0, 2.9, 2.8, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 
2.1, 2.0, 1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, 1.2, 1.1, 1.0, 0.9, 0.8, 
0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0),
              y = c(2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 
2.03, 1.95, 1.55, 1.06, 0.72, 0.47, 0.26, 0.11, 0.08, 0.06, 0.06, 
0.06, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 
0.05))

offset <- 1.4
p1 <- ggplot()+
  coord_equal(ratio=1)+
  geom_line(data=df1, aes(x=y, y=x))+
  scale_x_reverse(limits=c(4, 0))+
  scale_y_reverse(limits=c(4, 0))+
  geom_point(aes(x=1.11, y=0.62))+
  geom_point(aes(x=0.1, y=2.345))

p2 <- ggplot()+
  coord_equal(ratio=1)+
  geom_line(data=df2, aes(x=x, y=y))+
  geom_line(data=df2, aes(x=x+offset, y=y), linetype="dotted", 
   color="red")+
  coord_equal(ratio=1)+
  scale_x_continuous(limits=c(0, 4))+
  scale_y_continuous(limits=c(0, 4))+
  geom_point(aes(x=1.466667, y=0.1))+
  geom_point(aes(x=1.466667+offset, y=0.1))+
  geom_point(aes(x=2.0875, y=1.9))

grid.arrange(p2, p1, nrow = 2, ncol = 1, respect=TRUE)

plot

...