R ggplot facet - общая ось Y, несколько различных осей X - PullRequest
0 голосов
/ 08 июня 2018

У меня есть набор данных, состоящий из 3 переменных (a, b, c) и одного ответа (d).

    df <- structure(list(a = c(0.9973, 0.9965, 1.002, 1.0019, 1.001, 1.0031, 
1.0005, 1.0009, 1.0007, 0.9977, 1.0004, 1.001, 0.9936, 0.9945, 
1.0056, 1.0004, 0.9969, 0.9977, 1.001, 0.9876), b = c(-4.0841, 
-4.216, -4.1469, -4.1418, -4.1919, -4.1953, -4.3314, -4.1205, 
-4.2449, -4.0841, -4.276, -4.3396, -4.2885, -4.1386, -4.0689, 
-4.2229, -4.3886, -4.2267, -4.0344, -4.6152), c = c(32.04, 18.52, 
26.01, 25.65, 21.44, 22.26, 21.8, 21.6, 17.38, 13.84, 20.19, 
27.66, 20.85, 18.71, 22.18, 17.25, 26.78, 28.08, 25.9, 16.68), 
    d = c(2241, 2231, 2231, 2220, 2218, 2216, 2210, 2204, 
    2202, 2194, 2157, 2028, 1853, 1850, 1770, 1755, 1679, 
    1673, 1673, 1645)), .Names = c("a", "b", "c", "d"), class = "data.frame", row.names = c(NA, 
-20))

Моя цель - использовать facet в ggplot2 для создания графикас общей осью Y от d и тремя гранями, имеющими оси X соответственно a, b и c - другими словами, d против a, d против b и d против c, смежных друг с другом собщая ось Y.Приближение моей цели может быть показано в базе R с помощью:

par(mfrow=c(1,3))
plot(df$a, df$d)
plot(df$b, df$d)
plot(df$c, df$d)

Я хотел бы сделать это с помощью ggplot и без повторения оси Y.Я видел подобные графики, но они обычно включают одну ось X, повторенную несколько раз.Я пытался melt данных (то есть от reshape2), но я не придумал подходящую для меня ориентацию.

Было бы также визуально желательно иметь каждый из d vsa, d против b и d против c - другой цвет.

Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Спасибо, Тунг и Аманда, что вывели меня на правильный путь.Ключ должен использовать facet_wrap вместо facet_grid.Как только данные представлены в надлежащем длинном формате, как указано выше:

library(tidyverse) 
df_long <- df %>% 
   gather(key, value, a:c)

, тогда эта версия добивается цели:

ggplot(df_long, aes(x = value, y = d, color = key)) +
    geom_point() +
    facet_wrap(~ key, scales="free_x")
0 голосов
/ 08 июня 2018

Вы на правильном пути.Нам нужно преобразовать df в длинный формат (например, tidyr::gather), а затем использовать ggplot::facet_grid, чтобы получить нужный график

df <- structure(list(a = c(0.9973, 0.9965, 1.002, 1.0019, 1.001, 1.0031, 
  1.0005, 1.0009, 1.0007, 0.9977, 1.0004, 1.001, 0.9936, 0.9945, 
  1.0056, 1.0004, 0.9969, 0.9977, 1.001, 0.9876), b = c(-4.0841, 
  -4.216, -4.1469, -4.1418, -4.1919, -4.1953, -4.3314, -4.1205, 
  -4.2449, -4.0841, -4.276, -4.3396, -4.2885, -4.1386, -4.0689, 
  -4.2229, -4.3886, -4.2267, -4.0344, -4.6152), c = c(32.04, 18.52, 
  26.01, 25.65, 21.44, 22.26, 21.8, 21.6, 17.38, 13.84, 20.19, 
  27.66, 20.85, 18.71, 22.18, 17.25, 26.78, 28.08, 25.9, 16.68), 
      d = c(2241, 2231, 2231, 2220, 2218, 2216, 2210, 2204, 
      2202, 2194, 2157, 2028, 1853, 1850, 1770, 1755, 1679, 
      1673, 1673, 1645)), 
  .Names = c("a", "b", "c", "d"), 
  class = "data.frame", row.names = c(NA,-20))

library(tidyverse)

df_long <- df %>% 
  gather(key, value, a:c)

ggplot(df_long, aes(x = d, y = value, color = key)) +
  geom_point() +
  facet_grid(~ key) +
  theme_bw()

ggplot(df_long, aes(x = d, y = value, color = key)) +
  geom_line() +
  facet_grid(~ key)+
  theme_bw()

ggplot(df_long, aes(x = d, y = value, color = key, fill = key)) +
  geom_col() +
  facet_grid(~ key)+
  theme_bw()

Создано в 2018-06-07 пакетом представительство (v0.2.0).

...