функция seq с функцией stat_smooth

#r #ggplot2 #seq

Вопрос:

У меня есть расплавленный фрейм данных с 3 переменными.

       rn      variable       value
1     1 mhits_L$fhits 0.002262443
2     2 mhits_L$fhits 0.000000000
3     3 mhits_L$fhits 0.000000000
4     4 mhits_L$fhits 0.002262443
5     5 mhits_L$fhits 0.002262443
6     6 mhits_L$fhits 0.000000000
7     7 mhits_L$fhits 0.000000000
8     8 mhits_L$fhits 0.002262443
9     9 mhits_L$fhits 0.000000000
10   10 mhits_L$fhits 0.000000000



     rn      variable       value
1     1 mhits_H$fhits 0.000000000
2     2 mhits_H$fhits 0.000000000
3     3 mhits_H$fhits 0.000000000
4     4 mhits_H$fhits 0.000000000
5     5 mhits_H$fhits 0.004273504
6     6 mhits_H$fhits 0.000000000
7     7 mhits_H$fhits 0.000000000
8     8 mhits_H$fhits 0.000000000
9     9 mhits_H$fhits 0.000000000
10   10 mhits_H$fhits 0.004273504



    rn       variable       value
1     1 mhits_VH$fhits 0.000000000
2     2 mhits_VH$fhits 0.000000000
3     3 mhits_VH$fhits 0.000000000
4     4 mhits_VH$fhits 0.004291845
5     5 mhits_VH$fhits 0.004291845
6     6 mhits_VH$fhits 0.004291845
7     7 mhits_VH$fhits 0.000000000
8     8 mhits_VH$fhits 0.004291845
9     9 mhits_VH$fhits 0.000000000
10   10 mhits_VH$fhits 0.000000000
 

Я хотел построить сглаженный график, используя seq(rn):

 ggplot(aes(x = seq(rn), y = value, color = variable))   
  stat_smooth(aes(y = value), position = "identity", method = "loess", span = 0.1,se = FALSE)
 

График отображается (как показано на рисунке) с разделением каждой из переменных вместо одного графика, все три из которых имеют одинаковую ось x 0-550. В основном все три должны быть наложены на один и тот же seq(rn) от 0-550. Чего мне не хватает? сюжет

Комментарии:

1. Чего вы надеялись достичь с seq(rn) помощью этого ? Также изображение не отображалось в вашем вопросе. Пожалуйста, отредактируйте и опубликуйте, чтобы мы могли видеть, что происходит.

2. Извините за это, добавил сюжет. Без seq () сглаживание не работает, потому что слишком много точек? Откройте для других опций вместо seq() — но с seq каждая переменная в отдельности выглядит так, как я хочу.

3. Похоже, вы просто показываете небольшой фрагмент своих данных, поэтому трудно понять, в чем проблема. Можете ли вы поделиться результатами data %>% group_by(variable) %>% summarize_all(range)

Ответ №1:

Не уверен в проблеме с вашими данными, но вот пример с некоторыми моделируемыми данными, которые могут помочь.

 library(tidyverse)

# set siulation size
n <- 100

# simulate some data
data1 <-
  data.frame(
    rn = rep(1:n, times = 3),
    variable = rep(LETTERS[1:3], each = n),
    value = c(1:n * (1   runif(n, 0, 1)),
              1:n * (1   runif(n, 0, 2)),
              1:n * (1   runif(n, 0, 3)))
  )

# plot with seq
data1 %>% 
  ggplot(aes(seq(rn), value, color = variable))  
  geom_point()  
  geom_smooth(span = 0.2, se=F)
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
 

 # plot without seq
data1 %>% 
  ggplot(aes(rn, value, color = variable))  
  geom_point()  
  geom_smooth(span = .2, se=F)
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
 

Создано 2021-06-15 пакетом reprex (v2.0.0)

Комментарии:

1. Спасибо, что указали — я отредактировал вопрос, чтобы включить первые 10 строк других переменных. rn колеблется от 1-550 для всех 3, но данные выглядят одинаково для всех. Без seq — выглядит так ( imgur.com/a/k6hTgqo ) и я бы не хотел, чтобы это было facet_wrap().

2. Почему вы думаете, что этот график неправильный? На самом деле это выглядит разумно для меня, основываясь на том, что вы показали до сих пор.

3. Я хотел, чтобы это выглядело так imgur.com/a/xXNQ46q . Решается путем поворота данных вместо плавления. Понятия не имею, почему это сработало лучше. Спасибо за вашу помощь!