Построение графиков линий на основе значений столбцов из той же таблицы данных с использованием Plotly - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь построить линейный график различных типов автомобилей, проданных за день, в ** заговоре ** на ** R **. График будет выглядеть так, что на нем будут представлены линейные графики для каждого типа автомобилей, которые продавались каждый день. Допустим, у меня есть датафрейм с именем ** df1 **

id      date       Value 
Honda    10/30/12   2
Honda    10/31/12   3
Honda    11/1/12    3
Merc     11/2/12    4
Merc    10/30/12    1
Merc    10/31/12    2
Toyota   11/1/12    3
Toyota   11/3/12    2

Теперь мне нужны три линии (по одной линии для каждого типа автомобиля) на одной оси x.

Я попытался использовать функцию filter() внутри графика в аргументе y axis, как показано ниже:

plot_ly(df1,x=~date)%>% 
add_trace(y=filter(df1,id=="Honda")$value,name="Honda",mode="lines+markers")%>%
add_trace(y=filter(df1,id=="Merc")$value,name="Honda",mode="lines+markers")%>%
add_trace(y=filter(df1,id=="Toyota")$value,name="Honda",mode="lines+markers")%>%
layout(xaxis=list(title="Date"),yaxis=list(title="Cars Sold"))

Однако я получаю ошибку

Ошибка: столбцы Tibble должны иметь одинаковую длину, только значения длины один перерабатываются: * Длина 3: столбец y * Длина 8: столбец x Вызовите `rlang :: last_erro ()

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

1 Ответ

0 голосов
/ 09 июля 2019

Я не увидел ту же ошибку (без указания типа трассы, он нарисовал гистограмму).

library(plotly)

df1 <- data.frame(
  id = c("Honda", "Honda", "Honda", "Merc", "Merc", "Merc", "Toyota", "Toyota"),
  date = c('10/30/12', '10/31/12', '11/1/12', '11/2/12', '10/30/12', '10/31/12', '11/1/12', '11/3/12'),
  Value = c(2, 3, 3, 4, 1, 2, 3, 2)
)

df1$date <- as.Date(df1$date, "%m/%d/%y")

plot_ly(df1,x=~date)%>% 
  add_trace(y=filter(df1,id=="Honda")$value,name="Honda",mode="lines+markers")%>%
  add_trace(y=filter(df1,id=="Merc")$value,name="Honda",mode="lines+markers")%>%
  add_trace(y=filter(df1,id=="Toyota")$value,name="Honda",mode="lines+markers")%>%
  layout(xaxis=list(title="Date"),yaxis=list(title="Cars Sold"))

> plot_ly(df1,x=~date)%>% 
+   add_trace(y=filter(df1,id=="Honda")$value,name="Honda",mode="lines+markers")%>%
+   add_trace(y=filter(df1,id=="Merc")$value,name="Honda",mode="lines+markers")%>%
+   add_trace(y=filter(df1,id=="Toyota")$value,name="Honda",mode="lines+markers")%>%
+   layout(xaxis=list(title="Date"),yaxis=list(title="Cars Sold"))
No trace type specified:
  Based on info supplied, a 'histogram' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#histogram

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

df1 %>%
  group_by(id) %>%
  plot_ly(x=~date, y=~Value, type='scatter', color=~id, mode="lines+markers") %>%
  layout(xaxis=list(title="Date"),yaxis=list(title="Cars Sold"))

plot of cars sold vs. date using plotly

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