首页 文章

如何在R中创建轨道图? (Plotly / GGPLOT2)

提问于
浏览
-2

我花时间研究没有指导如何创建orbit chart

理想情况下,我希望能够创建交互式版本(例如Plotly),但ggplot2也足够了 .

任何建议都非常感谢!

3 回答

  • 0

    对于不久前的每周一次竞赛,我创建了一些像这样的图表 . 我认为现在普遍接受的术语是“连接散点图” .

    这是我使用的骨架 plotly 代码 .

    plot_ly(
      df,
      x = x_var,
      y = y_var,
      group = group_var,
      mode = "markers") %>%
      add_trace(
        x = x_var,
        y = y_var,
        xaxis = list(title = ""),
        yaxis = list(title = ""),
        group = group_var,
        line = list(shape = "spline"),
        showlegend = FALSE,
        hoverinfo = "none")
    

    您可以查看github repo for my submission,其中包含 ggplotplotly 的代码,以生成连接的散点图 .

  • 1

    使用ggplot2:

    geom_path()按照它们在数据中出现的顺序连接观察 . geom_line()按x轴上的变量顺序连接它们 .

    取自ggplot手册页:http://docs.ggplot2.org/current/geom_path.html

    如果你想要更多控制,你也可以尝试 geom_curvegeom_segment .

  • 1

    感谢@Bishop,我能够制定出与我理想的轨道聊天非常接近的东西 . 我包括一些图表注释,开始和结束日期以及方向是最佳解决方案的标签 .

    max_date <- final_data_grp[which.max(final_data_grp$week_num), ]
    min_date <- final_data_grp[which.min(final_data_grp$week_num), ]
    
    end <- list(
      x = max_date$AreaWOH,
      y = max_date$SLevel,
      text = paste('End', max_date$MondayDate),
      xref = "x",
      yref = "y"
    )
    
    start <- list(
      x = min_date$AreaWOH,
      y = min_date$SLevel,
      text = paste('Start', min_date$MondayDate),
      xref = "x",
      yref = "y"
    )
    
    best_label = list(
      x = min(final_data_grp$AreaWOH),
      y = max(final_data_grp$SLevel),
      text = 'Best Scenario',
      showarrow = FALSE,
      bordercolor='#c7c7c7',
      borderwidth=2,
      borderpad=4,
      bgcolor='#ff7f0e',
      opacity=.7
    )
    
    plot_ly(
      final_data_grp,
      x = AreaWOH,
      y = SLevel,
      group = MondayDate,
      showlegend = FALSE,
      marker = list(size = 8,
                    color = 'black',
                    opacity = .6)) %>% 
      add_trace(
        x = AreaWOH,
        y = SLevel,
        line = list(shape = "spline"),
        hoverinfo = "none",
        showlegend = FALSE) %>%
      layout(annotations = list(start, end, best_label))
    

相关问题