Как создать ggplot с одним значением 'x' и несколькими значениями 'y' - PullRequest
0 голосов
/ 11 января 2020

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

Это мои данные:

>### Self-care Tracker ###
> 
> library(tidyverse)
> 
> Month <- c("January", "February", "March", "April", "May", "June", "July",
+            "August", "September", "October", "November", "December")
>   
> Gym <- c(3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
> Yoga <- c(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) 
> Walk <- c(3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
> 
> 
> self.care <- tibble(Month, Gym, Yoga, Walk)
> self.care
# A tibble: 12 x 4
   Month       Gym  Yoga  Walk
   <chr>     <dbl> <dbl> <dbl>
 1 January       3     2     3
 2 February      1     1     1
 3 March         1     1     1
 4 April         1     1     1
 5 May           1     1     1
 6 June          1     1     1
 7 July          1     1     1
 8 August        1     1     1
 9 September     1     1     1
10 October       1     1     1
11 November      1     1     1
12 December      1     1     1

Это одна попытка построения графика:

> ggplot() +
+   geom_line(self.care, aes(x = Month, y = Gym)) +
+   geom_line(self.care, aes(x = Month, y = Yoga)) +
+   geom_line(self.care, aes(x = Month, y = Walk))
Error: `mapping` must be created by `aes()'

Я также попытался поместить данные в аргумент для ggplot, например так:

ggplot(self.care, aes(x = Month, y = c(Gym, Yoga, Walk)) +
  geom_point() + geom_line()

, что привело к ошибок нет, но график не выглядел правильно: Таблица ошибочных данных

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

1 Ответ

1 голос
/ 11 января 2020

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

library(ggplot2)
library(tidyverse)
self.care <- tibble(Month, Gym, Yoga, Walk)
self.care <- self.care %>% pivot_longer(cols = c(Gym, Yoga, Walk),
                           names_to = "Activity")

ggplot(self.care,aes(x = Month, 
                     y = value, 
                     col = Activity, 
                     group = Activity)) +
  geom_line() + 
  geom_point() + 
  #To set x axis labels as vertical 
  theme(axis.text.x = element_text(angle = 90, 
                             hjust = 1,
                             vjust = 0.5))

Rplot with point and lines

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