Построение данных по времени данных с датами в качестве имен столбцов - PullRequest
1 голос
/ 15 апреля 2020

У меня есть данные со всеми именами столбцов, но первым является год '

, который выглядит так:

Products      1999   2000   2001   2002   2003  ...

   Rice     23.254  19.42  17.30  10.22   8.05 
   Meat     45.123  30.15   5.33   4.08   1.09
  Metal     60.347  12.48   6.79   4.98   0.86
   ...

Я хотел бы построить график каждой строки (отдельно или все на одном графике) в зависимости от времени, где ось X представляет собой год (1999, 2000 и т. д.), а ось Y представляет собой данные. Например,

Мой график

Я искал, но не мог найти способ сделать это. Я мог бы переставить свои данные обычным способом (с указанием года в столбце), но я хотел бы знать, есть ли способ построить график с данными, подобными этим.

Любой совет будет высоко оценен. Заранее большое спасибо!

Ответы [ 3 ]

2 голосов
/ 15 апреля 2020

Использование matplot; на самом деле никаких проблем.

matplot(colnames(dat[-1]), t(dat[-1]), type="l", xlab="year", ylab="percent")
legend("topright", legend=dat$Products, col=1:3, lty=1:3)

enter image description here

Данные

dat <- structure(list(Products = c("Rice", "Meat", "Metal"), `1999` = c(23.254, 
45.123, 60.347), `2000` = c(19.42, 30.15, 12.48), `2001` = c(17.3, 
5.33, 6.79), `2002` = c(10.22, 4.08, 4.98), `2003` = c(8.05, 
1.09, 0.86)), row.names = c(NA, -3L), class = "data.frame")
1 голос
/ 15 апреля 2020

Это, кажется, отвечает на ваш вопрос (но это с преобразованием):

Отображение имен столбцов как оси X в R

Но сделать это без преобразования для одной переменной отдельно (здесь, рис) может быть сделано просто передавая аргумент colnames как x, как это (при условии, что ваши имена столбцов в формате нумерации c):

plot(colnames(df)[-1], df[which(df$Products == "Rice"), -1], xlab = "Year", ylab = "Percent", type = "l")

Или, если вы не ' у вас слишком много переменных, вы можете сделать их все с помощью al oop:

columns = df$Products
for (i in 1:nrow(df)) {plot(colnames(df)[-1], df[which(df$Products == columns[i]), -1], xlab = "Year", ylab = "Percent", type = "l")}

Но ggplot чище и возвращает более привлекательные графики:)

Это работает на примере, который я создал поэтому, если это не сработает, приведите воспроизводимый пример для лучшего ответа.

0 голосов
/ 15 апреля 2020

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

Используя dplyr :: pivot_longer () или более старый dplyr :: collect (), это простая операция.

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

TL; DR использовать аккуратные данные.

...