2016-11-30 3 views
-2

Я потратил время на изучение, без направления о том, как создать orbit chartКак создать диаграмму орбиты в R? (Plotly/ggplot2)

Я бы в идеале хотелось бы иметь возможность создавать интерактивные версии (например, Plotly), но в ggplot2 хватило бы, как хорошо.

Любые предложения очень ценятся!

ответ

1

В течение недельного конкурса, я создал несколько таких диаграмм. Я думаю, что общепринятым термином теперь является «связанная рассеянная диаграмма».

Скелет 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, который включает в себя код для обоих ggplot и plotly продуцировать связные диаграммы рассеяния.

1

Использование ggplot2:

geom_path() связывает наблюдения в том порядке, в котором они появляются в данных. geom_line() соединяет их в порядке переменной по оси x.

Взятые со страницы ggplot вручную: http://docs.ggplot2.org/current/geom_path.html

Вы также можете попробовать geom_curve и geom_segment если вы хотите большего контроля.

0

Благодаря @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)) 
Смежные вопросы