Построение графика для каждого уникального значения столбца - PullRequest
0 голосов
/ 20 февраля 2020

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

Пример набора данных выглядит следующим образом:

structure(list(ID = c(1, 1, 1, 2, 2), Date = c("01/02/20", "01/03/20", 
"01/05/20", "01/02/20", "01/05/20"), New = c(10, 5, 5, 10, 5), 
    Old = c(20, 20, 20, 20, 20), Percentage = c(0.5, 0.25, 0.25, 
    0.5, 0.25)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))
ID      Date          New    Old   Percentage 
1       01/02/20      10     20    0.5
1       01/03/20      5      20    0.25
1       01/05/20      5      20    0.25
2       01/02/20      10     20    0.5
2       01/05/20      5      20    0.25

Я хотел сделать для л oop, который перебирает уникальные значения ID и отображает новую и старую дату против. Также может быть другой аспект, который должен изменить процент, но в основном первый график сравнения. Сначала я попытался сделать это как дату против нового, как показано ниже:

for (ii in unique(data$ID)) {
  plt <- ggplot(data %>% filter(ID == ii),
                aes(x = "Month",
                    y = "New")) +
    geom_point(color = "dodgerblue3") + 
    theme_minimal()
  print(plt)

}

Результат в основном дал мне точечный сюжет, который я не понимал. Как можно добавить Старое сравнение, а также еще один график для процента.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

-Что касается вашего l oop, я думаю, вы могли бы просто использовать вместо него фасетную функцию

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

попробуйте это:

## get tidy data
tidy_data <- data %>% pivot_longer(c("New", "Old"), names_to = "Age", values_to = "Number")

## get the plots (facet_wrap is used to have multiple plots)
plt <- ggplot(tidy_data, aes(x = Date, y = Number, color = Age)) + geom_point() + facet_wrap(~ ID)
plt
0 голосов
/ 20 февраля 2020

Это то, что вы ищете?

library(tidyverse)
library(lubridate)

df %>%
    mutate(Date = mdy(Date)) %>%
    pivot_longer(cols = c("New", "Old"), names_to = "newOrOld") %>%
    ggplot(aes(Date, value, colour = newOrOld)) +
    geom_point() +
    facet_grid(. ~ ID)

enter image description here

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