Как построить временной ряд на панели в ggplot, ограненный одной из переменных кадра данных - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть такая база данных,

ani <- structure(list(year = c(2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
                               2010L, 2011L, 2012L, 2013L, 2014L, 2008L, 
                               2009L, 2010L, 2011L, 2012L, 2013L, 2014L), 
                      animal = c("cat", "cat", "cat", "cat", "cat", "cat", 
                                 "dog", "dog", "dog", "dog", "dog", "rat", 
                                 "rat", "rat", "rat", "rat", "rat", "rat"), 
                      height = c(12.5, 20, 25, 26, 28, 31, 32, 34, 37, 
                                 44, 44, 4, 5, 5, 6, 8, 8, 9), 
                      weight = c(2.4, 2.6, 2.7, 2.8, 3.2, 4.4, 4.7, 5.1, 
                                 5.6, 5.8, 6.5, 0.4, 0.5, 0.9, 1.2, 1.1, 1.3, 1.4)),
                 .Names = c("year", "animal", "height", "weight"), 
                 class = "data.frame", 
                 row.names = c(NA, -18L))

Мне удалось получить чаты временных рядов по росту и весу для каждого животного таким образом (здесь я это сделал для кошки):

cat<- subset(ani, animal == "cat")
cat[2]<-NULL # I need to delete the column of the type of animal 

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

library(reshape2)
library(ggplot2)

meltcat <- melt(cat,id="year")
chartcat <- ggplot(data = meltcat, aes(x = year, y = value, colour=variable)) + geom_line()
print(chartcat)

Однако я мог быНельзя найти способ создания трехуровневой (фасетной) одиночной диаграммы по строкам с использованием переменной «животное».

Допустим, в самом нижнем ряду я хочу построить временной ряд (с 2009 по 2014 годы) роста и веса кошки.В среднем ряду я хочу построить временные ряды (с 2010 по 2014 год) роста и веса собаки.И в самом верхнем ряду я хочу построить временной ряд (с 2008 по 2014 год) роста и веса крысы.Тогда будет две серии на панель (рост и вес).

Обратите внимание, что серия каждого животного отличается по длине.Для меня это хорошо иметь ось X с 2008 по 2014 год с отсутствующими данными для кошки в 2008 году и для собаки в 2008 и 2009 годах. Однако, конечно, если это невозможно, для меня это будетздорово, если вы поможете мне в случае, когда все серии имеют одинаковую длину (2010-2014).

Как я могу получить этот график в ggplot2?

Большое спасибо заранее

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете попробовать это:

# reshape dataframe
meltani <- melt(ani, id.vars = c("year", "animal"))

# reverse factor order for animal (otherwise the order would be cat -> dog -> rat)
meltani$animal <- factor(meltani$animal, 
                         levels = sort(unique(meltani$animal), decreasing = TRUE))

ggplot(meltani,
       aes(x = year, y = value, colour = variable)) +
  geom_line() +
  facet_wrap(~ animal, ncol = 1)

08 - 14 plot

Если вы хотите ограничить диапазон оси X для всех фасетов, добавьте + coord_cartesian(xlim = c(2010, 2014))к вашему коду.Кроме того, вы можете варьировать диапазон по оси X между фасетами, добавив scales = "free_x" в facet_wrap().

...