【问题标题】:Plotting graphs lines based on column values from the same datafram using Plotly使用 Plotly 根据来自同一数据帧的列值绘制图形线
【发布时间】:2019-07-09 13:36:02
【问题描述】:

我正在尝试在 ** R ** 上以 ** plotly ** 绘制每天销售的不同类型汽车的折线图。该图表的外观是,它将包含每天售出的每种汽车的折线图。所以假设我有一个名为 ** 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 轴上设置三条线(每种类型的汽车一条线)。

我尝试在 y axis 参数中使用 filter() 函数,如下所示:

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 列必须具有一致的长度,只有长度为 1 的值被回收: * 长度 3:列y * 长度 8:列x 调用`rlang::last_erro()

我知道它会抛出一个错误,因为 x 值更多而 y 值更少,我该如何解决?

【问题讨论】:

    标签: r dplyr plotly


    【解决方案1】:

    我没有看到同样的错误(没有指定跟踪类型,它绘制了一个直方图)。

    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
    

    您无需按每种汽车类型进行过滤。而是在调用 plot_ly 之前使用 group_by --- 也许这就是你的想法:

    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"))
    

    【讨论】:

    • 考虑到我什至忘记在指定 y 轴值时输入“~”,这会引发错误,这让我难以置信。但不管它确实抛出了上面的错误,我都重试了。你能在没有错误的地方显示你使用的代码吗?
    • 也回复您的回答,不是真的,我希望图例显示每种汽车的不同颜色。在您的代码中没有发生,它只是向我显示值的范围颜色
    • 查看编辑 - 如果这与您在图例中需要的不同,请告诉我,我愿意尽我所能提供帮助。
    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多