Plotly - создание круговой диаграммы с непрерывной цветовой шкалой - PullRequest
0 голосов
/ 31 мая 2018

Я хочу создать диаграмму, на которой цвета каждого среза имеют другую переменную в кадре данных.Это довольно просто сделать в ggplot2, однако я изо всех сил пытаюсь преобразовать это в плотно.

Мой пример кода здесь:

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

И это вывод: enter image description here

Похоже, я неправильно что-то делаю с атрибутом "color".Я хотел бы, чтобы была цветовая схема с непрерывной шкалой, предпочтительно красный цвет, когда переменная Rating близка к 0, и зеленый цвет, когда она близка к 1.

Спасибо.

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете

  • отсортировать ваш фрейм данных

    sorted_df <- df[order(df$Rating),]
    
  • добавить пользовательские цвета, используя colorRampPalette

    gradient <- colorRampPalette(c('red', 'green'))
    sorted_df$colors <- gradient(dim(df)[1])[as.numeric(cut(sorted_df$Rating,
                                                            breaks = dim(df)[1]))]
    
  • назначить цвета вашему графику

    marker = list(colors = ~colors)
    

, что дает вам enter image description 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)
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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...