Добавление вертикальной опорной линии к графику на категориальной оси

#r #plotly

Вопрос:

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

 library(magrittr)
library(plotly)

df <- data.frame(grp = c("A", "B", "C", "D", "E") %>% as.factor,
           val = c(11:15)) %>% 
df %>%
  plot_ly(x = ~val,
          y = ~grp,
          type = "bar") %>% 
  add_segments(xend = 20,
               yend = ~grp)
 

введите описание изображения здесь

Ответ №1:

Вы можете добавить маркер в конец сегмента.
Кроме того, вы можете сгруппировать легенды сегмента и маркера вместе, чтобы при переключении элементов легенды они были скрыты/показаны одновременно.

Код

  df %>%
  plot_ly(x = ~val,
          y = ~grp,
          type = "bar") %>% 
  add_segments(xend = 20,
               yend = ~grp,
               legendgroup = "g1") %>%
  add_markers(x = 20,
              # style marker
              marker = list(
                symbol = "line-ns-open",
                size = 15,
                line = list(
                  width = 5
                )),
              # combine legends
              legendgroup = "g1",
              showlegend = F)
  
 

Сюжет
введите описание изображения здесь

Комментарии:

1. Большое спасибо @tamtam. Один последующий вопрос, который я распознаю, выходит за рамки исходного вопроса, знаете ли вы, как я скрываю только запись легенды для цвета полосы (т. Е. трассировка 0), сохраняя при этом запись легенды для строки ошибок (т. Е. трассировка 1). Я попытался добавить «showlegend = F» в первое утверждение «plot_ly», но это скрывает всю легенду.

2. Первый showlegend, похоже, перезаписывает остальную часть кода. Возможно, вам потребуется определить showlegend для каждой трассировки и добавить %>% layout(showlegend = T) в конце. df %>% plot_ly(x = ~val, y = ~grp, type = "bar", showlegend = F) %>% add_segments(xend = 20, yend = ~grp, legendgroup = "g1", showlegend = T) %>% add_markers(x = 20, marker = list(symbol = "line-ns-open", size = 15, line = list(width = 5)), legendgroup = "g1", showlegend = F) %>% layout(showlegend = T)

3. Это сделало свое дело. Большое спасибо!