简体   繁体   中英

R plotly - How to fix colors when plotting grouped charts

I'm trying to plot overlaid line and bar charts using plotly, grouped by the same feature grp .
I need to use fixed colors for both lines and bars.

It works well when I first add the bar-trace :

library(plotly)

df <- data.frame(year = rep((2000:2017), each=2),
             grp = rep(c("Grp1", "Grp2"), 18),
             y1 = rnorm(36, 100, 40),
             y2 = rnorm(36, 50, 10)
             )


plot_ly(df) %>% 
   add_trace( x = ~year, y = ~y1, 
           type = 'bar', 
           yaxis = "y2",
           opacity = .4, 
           color = ~grp, 
           colors = colorRamp(c("grey", "black"))) %>%
   add_trace(x = ~year, y = ~y2, 
           type = 'scatter', 
           mode = 'lines+markers', 
           linetype = ~grp,
           line = list(color = "red")) %>% 
   layout(yaxis2 = list(overlaying = "y",
                     side = "right")) 

在此处输入图片说明

But If I switch bar trace and line trace, my color selection for bars disappears.

  plot_ly(df) %>% 
     add_trace(x = ~year, y = ~y2, 
          type = 'scatter', 
          mode = 'lines+markers', 
          linetype = ~grp,
          line = list(color = "red")) %>% 
     add_trace( x = ~year, y = ~y1, 
           type = 'bar', 
           yaxis = "y2",
           opacity = .4, 
           color = ~grp, 
           colors = colorRamp(c("grey", "black"))) %>%
     layout(yaxis2 = list(overlaying = "y",
                     side = "right")) 

在此处输入图片说明

Obviously my syntax is incorrect : does someone know how to write this code properly to ensure colors are stable whatever the order is ?

Many thanks !

Try to specify colors inside plot_ly :

plot_ly(df, colors = colorRamp(c("grey", "black"))) %>% 
  add_trace(x = ~year, y = ~y2, 
       type = 'scatter', 
       mode = 'lines+markers', 
       linetype = ~grp,
       line = list(color = "red")) %>% 
  add_trace( x = ~year, y = ~y1, 
       type = 'bar', 
       yaxis = "y2",
       opacity = .4, 
       color = ~grp) %>%
  layout(yaxis2 = list(overlaying = "y",
       side = "right")) 

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM