Search code examples
rgraphplotlyr-plotly

Make all ticks appear on axis using R plotly


I wrote a code to make a subplots with scatterplots using my data. Here is a graph:

enter image description here

This is hours on x axis. As you see, not all of them appear on x axis. How could i make all 24 hours be on axis? Even if for example in dataframe there is no value for 23 o'clock, i want it to be on x axis. How to do that?

Here is my code:

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)
}

Solution

  • This could be achieved in layout via the attribute xaxis like so. The ticks or breaks can be set via tickvals, the tick labels via ticktext.

    This is illustrasted using some random data in the reproducible example below:

    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")))
    

    enter image description here