Создание лент с сюжетом - PullRequest
0 голосов
/ 12 мая 2018

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

cars_light <- cars_log[cars_log$log.weight. <= log(mean(cars$weight)), ]
cars_heavy <- cars_log[cars_log$log.weight. > log(mean(cars$weight)),]
cars_log$wt_cat <- ifelse(cars_log$log.weight. > log(mean(cars$weight)), 'heavy', 'light')

До сих пор я создавал график рассеяния, выполняя это:

    plot_ly(
  data = cars_log,
  type = "scatter",
  x = ~log.acceleration.,
  y = ~ log.mpg.,
  color = ~ factor(wt_cat),
  colors = c("#8bc34a", "#ff5722"),
  marker = list(size = 10, opacity = 0.6)
) %>%
  layout(title = "Heavy cars VS light cars")

Что дает мне этот результат:

enter image description here

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

    ggplot(cars_log, aes_string('log.acceleration.', 'log.mpg.')) +
  geom_point(aes(color = factor(wt_cat))) +
  geom_smooth(method = 'lm', aes(color = factor(wt_cat)))

Это образец моих данных:

    > cars_log[1:5,]
  log.mpg. log.cylinders. log.displacement. log.horsepower. log.weight. log.acceleration. model_year origin
1 2.890372       2.079442          5.726848        4.867534    8.161660          2.484907         70      1
2 2.708050       2.079442          5.857933        5.105945    8.214194          2.442347         70      1
3 2.890372       2.079442          5.762051        5.010635    8.142063          2.397895         70      1
4 2.772589       2.079442          5.717028        5.010635    8.141190          2.484907         70      1
5 2.833213       2.079442          5.710427        4.941642    8.145840          2.351375         70      1

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете использовать функцию add_ribbons().Его основными тремя аргументами являются:

  • data данные
  • x х значений
  • ymin нижняя граница ленты
  • ymax верхняя граница ленты

В связи с отсутствием минимального набора данных я выбрал следующий: линия прямой регрессии R , которая использовалась при закрытиивопрос (т.е. рисование линии регрессии в R Plotly).Используя этот набор данных, вот пример, где регрессия выполняется вне Plotly, ее вывод форматируется с использованием broom::augment(), а затем используется для создания ленты:

library(plotly)
library(broom)
data(airquality)
airq <- airquality %>% 
      filter(!is.na(Ozone))
fit <- lm(Ozone ~ Wind, data = airq)
airq %>% 
  plot_ly(x = ~Wind, name = 'Scatter') %>% 
  add_markers(y = ~Ozone) %>% 
  add_ribbons(data = augment(fit),
              ymin = ~.fitted - 1.96 * .se.fit,
              ymax = ~.fitted + 1.96 * .se.fit,
              line = list(color = 'rgba(7, 164, 181, 0.05)'),
              fillcolor = 'rgba(7, 164, 181, 0.2)',
              name = '95% ribbon')

, которая дает следующий график: enter image description here

...