Faça todos os ticks aparecerem no eixo usando R plotly

Aug 25 2020

Eu escrevi um código para fazer subplots com scatterplots usando meus dados. Aqui está um gráfico:

Isso é horas no eixo x. Como você pode ver, nem todos eles aparecem no eixo x. Como posso fazer com que todas as 24 horas fiquem no eixo? Mesmo se, por exemplo, no dataframe não houver valor para 23 horas, eu quero que seja no eixo x. Como fazer isso?

Aqui está o meu código:

plot <- function(df) {

  subplotList <- list()
  for(metric in unique(df$metrics)){ subplotList[[metric]] <- df[df$metrics == metric,] %>%
      plot_ly(
        x = ~ hr,
        y = ~ actual,
        name = ~ paste(metrics, " - ", time_pos),
        colors = ~ time_pos,
        hoverinfo = "text",
        hovertemplate = paste(
          "<b>%{text}</b><br>",
          "%{xaxis.title.text}: %{x:+.1f}<br>",
          "%{yaxis.title.text}: %{y:+.1f}<br>",
          "<extra></extra>"
        ),
        type = "scatter",
        mode = "lines+markers",
        marker = list(
          size = 7,
          color = "white",
          line = list(width = 1.5)
        ),
        width = 700,
        height = 620
      ) %>% layout(autosize = T,legend = list(font = list(size = 8)))
  }
  subplot(subplotList, nrows = length(subplotList), margin = 0.05)
}

Respostas

stefan Aug 25 2020 at 12:44

Isso pode ser feito por layoutmeio do atributo xaxiscomo tal. Os tiques ou quebras podem ser definidos através tickvalsdos rótulos dos tiques através de ticktext.

Isso é ilustrado usando alguns dados aleatórios no exemplo reproduzível abaixo:

library(plotly)

set.seed(42)

d <- data.frame(
  x = sort(sample(24, 15)),
  y = 1:15 + runif(15),
  z = 1:15 + runif(15)
)

plot_ly(d) %>%
  add_trace(x = ~x, y = ~y, type = "scatter", mode = "lines+markers") %>% 
  add_trace(x = ~x, y = ~z, type = "scatter", mode = "lines+markers") %>% 
  layout(xaxis = list(tickvals = 1:24, ticktext = paste0(1:24, "h")))