Geom_smooth не появляется в простом сюжете - PullRequest
0 голосов
/ 28 февраля 2020
ggplot(R3L12, aes(x=Time, y=HeartRate)) +
  geom_point() +
  geom_smooth()

Это вывод dput (head (R3L12, 20))

structure(list(Date = c("2015-05-23", "2015-05-23", "2015-05-23", 
"2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", 
"2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", 
"2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", 
"2015-05-23", "2015-05-23"), Time = c("07:25:00", "07:40:00", 
"07:45:00", "09:10:00", "11:45:00", "11:55:00", "12:05:00", "12:35:00", 
"12:45:00", "13:30:00", "13:40:00", "13:45:00", "13:55:00", "14:00:00", 
"14:05:00", "14:10:00", "14:20:00", "14:25:00", "14:30:00", "14:35:00"
), Turtle = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("R3L1", "R3L11", 
"R3L12", "R3L2", "R3L4", "R3L8", "R3L9", "R4L8", "R8L1", "R8L4", 
"R8NAT123"), class = "factor"), HeartRate = c(7.56457, 6.66759, 
17.51107, 9.72277, 19.44553, 13.07674, 28.115, 14.99467, 17.16947, 
40.40479, 37.76642, 29.98933, 43.5329, 49.61471, 47.74245, 44.10196, 
21.35316, 44.68609, 49.25255, 29.98933)), row.names = c(NA, 20L
), class = "data.frame")

Вот код графика, который я пытался создать. Я в замешательстве, потому что когда я строю график, geom_smooth не появляется. Time - факторная переменная, а HeartRate - двойная. Я новичок в R, поэтому дайте мне знать, если вам нужно больше информации!

enter image description here

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Если времена распределены неравномерно, как это имеет место, и вы хотите, чтобы расстояние между точками оси x отражало фактическое истекшее время, вы должны преобразовать переменную времени в объект POSIXct. Это также может изменить способ отображения линии сглаживания, поскольку плотность точек будет изменяться по оси X.

R3L12$time.posix <- as.POSIXlt(paste(R3L12$Date, R3L12$Time), format="%Y-%m-%d %H:%M:%S")
ggplot(R3L12, aes(x=time.posix, y=HeartRate)) +
   geom_point() +
   geom_smooth()

enter image description here

1 голос
/ 28 февраля 2020

Альтернативное решение с использованием пакета lubridate:

library(lubridate)
library(scales)
library(dplyr)
library(ggplot2)
df %>% 
  mutate(DateTime = ymd_hms(paste(Date, Time))) %>%
  ggplot(aes(x= DateTime, y = HeartRate))+
  geom_point()+
  geom_smooth()+
  scale_x_datetime( breaks=date_breaks("1 hour"), labels = date_format("%H:%M"))

enter image description here

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

Это другое решение в двух направлениях. (1) Переопределяет aes внутри geom smooth. (2) Он обрабатывает значения символов времени как порядковые, и, таким образом, он рассматривает различные измерения как равноудаленные. В зависимости от ваших гипотез, это не всегда лучшая вещь. Но иногда это может быть именно то, что вы хотите.

R3L12<-structure(list(Date=c("2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23","2015-05-23"),
                      Time=c("07:25:00","07:40:00","07:45:00","09:10:00","11:45:00","11:55:00","12:05:00","12:35:00","12:45:00","13:30:00","13:40:00","13:45:00","13:55:00","14:00:00","14:05:00","14:10:00","14:20:00","14:25:00","14:30:00","14:35:00"),
                      Turtle=structure(c(3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L),
                                         .Label = c("R3L1","R3L11","R3L12","R3L2","R3L4","R3L8","R3L9","R4L8","R8L1","R8L4","R8NAT123"),class="factor"),
                      HeartRate=c(7.56457,6.66759,17.51107,9.72277,19.44553,13.07674,28.115,14.99467,17.16947,40.40479,37.76642,29.98933,43.5329,49.61471,47.74245,44.10196,21.35316,44.68609,49.25255,29.98933)),row.names=c(NA,20L),class="data.frame")

ggplot(R3L12,aes(x=Time,y=HeartRate)) +
  geom_point() +
  geom_smooth(aes(x=as.numeric(factor(Time)),y=HeartRate))

enter image description here

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