Выберите 3 лучших родителей (группы) в графическом графике, используя R - PullRequest
0 голосов
/ 19 февраля 2020

То, что я хочу, это построить только 3 из моих parents, те, которые тратят самое большое cost с кодировкой ниже.

parent <- as.character(c("Sam","Elena","Sam","Jhon","Raul","Sam","Jhon","Sara","Paul","Chris"))
cost <- as.numeric(as.character(c(15000,10000,12000,15000,10000,12000,15000,14000,19000,2000)))
topic <- as.character(c("Banana","Banana","Berries","Apple","Watermelon","Banana","Berries","Avocado","Watermelon","Pinneaple"))

sample <- as.data.frame(cbind(parent,cost,topic))
sample$cost <- as.numeric(as.character(sample$cost))
sample$parent <- as.character(sample$parent)
sample$topic <- as.character(sample$topic)

# Color setting
ramp2 <- colorRamp(c("deepskyblue4", "white"))
ramp.list2 <- rgb( ramp2(seq(0, 1, length = 15)), max = 255)

plot_ly(sample, x = ~parent, y = ~cost, type = 'bar', color = ~topic) %>%
  layout(yaxis = list(title = 'Cost'), xaxis = list(title = 'Parent'), barmode = 'stack', colorway = ramp.list2) %>%
  config(displayModeBar = FALSE)

Я пытался использовать transforms внутри plotly функция, как это:

transforms = list(
list(
type = 'aggregate',
groups = sample$parent,
aggregations = list(
list(
target = 'x', 
func = 'max', 
enabled = T))
))

Но он все равно дает мне тот же вывод, и я хочу выбрать только 3. Кроме того, попытался использовать его так:

transforms = list(
list(
type = 'filter',
target = 'y',
operation = '>',
value = cost[-3:-1]))

Но это берет только стоимость без учета полной стоимости cost parent и дает мне только 2 родителей вместо 3. И наконец, он не использует ramp.list2 для выбора цветов.

1 Ответ

1 голос
/ 19 февраля 2020

В соответствии с тем, что я понял, вы можете использовать следующий код, чтобы получить 3 лучших родителей отдельно:

top_3 <- sample %>% 
         group_by(parent) %>% 
         summarise(cost = sum(cost)) %>% 
         arrange(-cost) %>% 
         head(3)

Это даст вам следующее:

# A tibble: 3 x 2
#   parent  cost
#   <chr>  <dbl>
# 1 Sam    39000
# 2 Jhon   30000
# 3 Paul   19000

Затем в вашем plot_ly вы можете просто сослаться на этих родителей top_3 следующим образом:

plot_ly(sample[sample$parent %in% top_3$parent,], x = ~parent, y = ~cost, type = 'bar', color = ~topic) %>%
   layout(yaxis = list(title = 'Cost'), xaxis = list(title = 'Parent'), barmode = 'stack', colorway = ramp.list2) %>%
   config(displayModeBar = FALSE)

, что приведет к следующему графику:

plot

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...