Добавление горизонтальной линии к гистограмме - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь использовать тип R plotly 'bar, чтобы создать график с горизонтально расположенными прямоугольниками и добавить к нему горизонтальную линию, которая находится на их фоне (а не идет поверхих).Кроме того, я хотел бы, чтобы линия расширялась симметрично на один блок в каждом направлении.

Вот что я делаю:

plot.df <- data.frame(x = paste0("LONG NAME ",1:6),y = 0.2,width=0.75,group = c("A","B","B","B","C","A"),stringsAsFactors = F)
plot.df$group <- factor(plot.df$group)


plotly::plot_ly(plot.df) %>%
  plotly::add_trace(x=~x,y=~y/2,type='scatter',mode='lines',line=list(color='black'),showlegend=F) %>%
  plotly::add_bars(x=~x,y=~y,width=~width,color=~group) %>%
  plotly::layout(xaxis=list(title=NA,zeroline=F,tickangle=45),yaxis=list(title=NA,zeroline=F,showgrid=F,range=c(0,1),showticklabels=F))

Что дает:

enter image description here

Мои вопросы:

  1. Как продлить линию в обоих направлениях
  2. Как поставить линию на заднем планетаким образом, он не распространяется по полям
  3. Я указал plot.df$y как 0,2, а диапазон yaxis равен c(0,1), поэтому ящики не выглядят как длинные столбцы.Но тогда легенда кажется слишком высокой.Есть ли лучший способ получить квадратные квадраты с легендой, которая выглядит ниже, чем в настоящее время?

1 Ответ

1 голос
/ 14 марта 2019

Для горизонтальной линии вы можете видеть Горизонтальная / вертикальная линия на графике

с

layout(legend =list(x = 1 ,y =0 ))

вы можете решить проблему легенды

Я не смог решить вашу вторую точку (поставьте планку на заднем плане). Надеюсь, это поможет:

hline <- function(y = 0, color = "blue") {
  list(
    type = "line", 
    x0 = 0, 
    x1 = 1, 
    xref = "paper",
    y0 = y, 
    y1 = y, 
    line = list(color = color)
  )
}

plot_ly(plot.df) %>%
  add_bars(x=~x,y=~y,width=~width,color=~group, hoverinfo = "text") %>%
  layout(shapes = list(hline(0.1)))%>%
  layout(legend =list(x = 1 ,y =0 ))%>%
  layout(xaxis=list(title=NA,zeroline=F,tickangle=45),yaxis=list(title=NA,zeroline=F,showgrid=F,range=c(0,1),showticklabels=F))
...