rplotlywaterfall

How to change the increasing & decreasing color in plotly waterfall graph when using subplots?


I am trying to change the colors of the increasing and decreasing color of the waterfall graph. I want the decreasing color to be green and the increasing color to be red. When I try to add the increasing and decreasing attributes to the plot_ly() it doesn't work. The colors stay the same for some reason.

Here is the data:

structure(list(Date = structure(c(1569888000, 1572566400, 1575158400, 
1577836800, 1580515200, 1583020800, 1585699200, 1588291200, 1590969600, 
1569888000, 1572566400, 1575158400, 1577836800, 1580515200, 1583020800, 
1585699200, 1588291200, 1590969600, 1569888000, 1572566400, 1575158400, 
1577836800, 1580515200, 1583020800, 1585699200, 1588291200, 1590969600
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), Percent_change = c(-45, 
-50, -25, -30, -40, -35, -1, -5, -25, 30, 45, 50, -30, -40, -35, 
-1, -5, -25, 50, -45, -30, -15, -20, -35, -1, -5, -25), Toys = c("Toy 1", 
"Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", 
"Toy 1", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2", 
"Toy 2", "Toy 2", "Toy 2", "Toy 3", "Toy 3", "Toy 3", "Toy 3", 
"Toy 3", "Toy 3", "Toy 3", "Toy 3", "Toy 3")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -27L))

Here is the code:

my_plot <- . %>% 
  plot_ly(x = ~Date, y = ~Percent_change, type = "waterfall",
          hoverinfo = "text",
          hovertext = ~paste("Date :", Date,
                             "<br> % Change:", Percent_change),
          increasing = (marker = list(color = "Maroon")),
          decreasing = (marker = list(color = "Teal")),
          totals = (marker = list(color = "blue"))) %>%
  add_annotations(
    text = ~unique(Toys),
    x = 0.5,
    y = 1,
    yref = "paper",
    xref = "paper",
    xanchor = "middle",
    yanchor = "top",
    showarrow = FALSE,
    font = list(size = 15)
  )

Solution

  • You should call the marker in a list like this:

    library(plotly)
    
    my_plot <- df %>% 
      plot_ly(x = ~Date, y = ~Percent_change, type = "waterfall",
              hoverinfo = "text",
              hovertext = ~paste("Date :", Date,
                                 "<br> % Change:", Percent_change),
              increasing = list(marker = list(color = "Maroon")),
              decreasing = list(marker = list(color = "Teal")),
              totals = list(marker = list(color = "blue"))) %>%
      add_annotations(
        text = ~unique(Toys),
        x = 0.5,
        y = 1,
        yref = "paper",
        xref = "paper",
        xanchor = "middle",
        yanchor = "top",
        showarrow = FALSE,
        font = list(size = 15)
      )
    
    my_plot
    

    Created on 2023-01-31 with reprex v2.0.2