Plotly - Create Pie Chart with continuous color scale

笑着哭i 提交于 2019-12-11 03:07:41

问题


I'm looking to create a plotly chart where the colors of each slice another variable in the dataframe. This is pretty simple to do in ggplot2, however, I'm struggling to convert this to plotly.

My sample code is here:

Product <- c("Product1","Product2","Product3","Product4","Product5","Product6","Product7")
Value <- c(1000000,200002,599996,1399994,2199992,2999990,3799988)
Rating = c(0.24, 0.28, 0.17, 0.1, 0.5, 0.6, 0.34)
df <- data.frame(Product,Value, Rating)

plot_ly(df, labels = ~Product, values = ~Value, type = 'pie', textinfo = 'label+percent',
         marker = list(color = ~Rating)) %>%
layout(xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
     yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

And this is the output:

It seems like I am not doing something right with the "color" attribute. I would like for there to be a continuous scale color scheme, preferably a red color when the Rating variable is near 0 and green when it is near 1.

Thanks.


回答1:


You could

  • sort your dataframe

    sorted_df <- df[order(df$Rating),]
    
  • add custom colors using colorRampPalette

    gradient <- colorRampPalette(c('red', 'green'))
    sorted_df$colors <- gradient(dim(df)[1])[as.numeric(cut(sorted_df$Rating,
                                                            breaks = dim(df)[1]))]
    
  • assign the colors to your plot

    marker = list(colors = ~colors)
    

which gives you

The color scale could use some tweaking.


Product <- c("Product1","Product2","Product3","Product4","Product5","Product6","Product7")
Value <- c(1000000,200002,599996,1399994,2199992,2999990,3799988)
Rating = c(0.24, 0.28, 0.17, 0.1, 0.5, 0.6, 0.34)
df <- data.frame(Product,Value, Rating)
sorted_df <- df[order(df$Rating),]
gradient <- colorRampPalette(c('red', 'green'))

sorted_df$colors <- gradient(dim(df)[1])[as.numeric(cut(sorted_df$Rating,
                                                        breaks = dim(df)[1]))]


plot_ly(sorted_df, labels = ~Product, values = ~Value, type = 'pie', textinfo = 'label+percent',
        marker = list(colors = ~colors)) %>%
  layout(xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))


来源:https://stackoverflow.com/questions/50625970/plotly-create-pie-chart-with-continuous-color-scale

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!