Plot_ly Scatterplot连接线怎么做最优雅?

时间:2017-11-10 11:53:38

标签: r plot plotly scatter-plot

我问自己如何解决以下最优雅的问题。我的数据包含一些实际值和一些建议值。现在我的数据看起来像下面的可重复示例:

library(plotly)
library(dplyr)

test_dt <- data.frame(Age=1:5, Key=c("Actuals", "Actuals", "Actuals", "Other", "Other") , Value=rnorm(5))

plot_ly(data = (test_dt %>% group_by(., Key) %>% arrange(desc(Age))), 
        x = ~Age, 
        y = ~Value,
        type = 'scatter',
        mode = 'lines',
        color = ~Key,
        linetype = ~Key
) %>% layout(
  yaxis = list(
    title = "SD"),
  margin = list(top=100, b=50)
)

此代码的输出如下所示:

如何绘制虚线,我画了红色箭头?

enter image description here

到目前为止,我的解决方案是访问实际值的最后一个值,并将此值作为“其他”行的新行插入。但我不认为这是非常优雅的,有时,如果根据输入我的数据中不存在其他值,那么我有一个为我的“其他”线绘制的图例,而实际上却没有。

act_age_max <- filter(test_dt, Key=="Actuals") %>% .[["Age"]] %>% max
propval_names <-  filter(test_dt, Key!="Actuals") %>% .[["Key"]]
last_actual <- filter(test_dt, Age==act_age_max, Key=="Actuals") %>% .[["Value"]]
acts_year <- filter(test_dt, Age==act_age_max, Key=="Actuals") %>% .[["Year"]]

append_dt <- data.frame(Age=act_age_max, Key=propval_names, Value=last_actual)
plot_data <- rbind(test_dt, append_dt)


plot_ly(data = (plot_data %>% group_by(., Key) %>% arrange(desc(Age))), 
        x = ~Age, 
        y = ~Value,
        type = 'scatter',
        mode = 'lines',
        color = ~Key,
        linetype = ~Key
) %>% layout(
  yaxis = list(
    title = "SD"),
  margin = list(top=100, b=50)
)

0 个答案:

没有答案