Как я могу создать топ-3 гистограммы, используя R? - PullRequest
0 голосов
/ 12 февраля 2020

Мне нравится эта библиотека, но я не самый лучший! Я пытаюсь построить простой столбчатый график с использованием библиотеки plotly в R Studio.

Это мои примерные данные:

structure(list(parent = c("Sam", "Elena", "Sam", "Jhon", "Raul", 
"Sam", "Jhon", "Sara", "Paul", "Chris"), cost = c(4, 1, 2, 4, 
1, 2, 4, 3, 5, 6), topic = c("Banana", "Banana", "Berries", "Apple", 
"Watermelon", "Banana", "Berries", "Avocado", "Watermelon", "Pinneaple"
)), row.names = c(NA, -10L), class = "data.frame")

И я пытаюсь построить их таким образом:

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

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

Но определенно есть что-то, что беспокоит, потому что :

Ось Y дает мне темы и цифры, поэтому я очень смущен этим.

Легенда показывает более одного раза каждую топи c.

Is не отображает только топ-3 на основе суммы стоимости.

Показанные цвета не похожи на те, которые я пытаюсь использовать.

Столбчатая диаграмма с накоплением в эта ссылка не делает ' я не могу понять, как я могу построить этот график так, как я хочу. Я хочу только 3 бара; один для Сэма - 39000 (разделенный на два цвета, потому что у него 3 темы, но 2 одинаковы, и я sh линия показывает разделение бананового цвета, чтобы он выглядел так, как будто это связано с двумя затратами), другой для Джона - 30000 (разделенных на два цвета) и последний для Пола - 19000. Также хочу, чтобы показы легенд не повторялись.

Это график, который я получаю с этим кодом:

plot

1 Ответ

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

Вы можете получить ошибку, потому что вы пытались добавить add_trace(y = ~topic), которая не нужна при указании barmode = 'stack'. Я не очень уверен насчет сюжета, который вы хотите в конце (топ3 или нет), но если вы начнете со следующего, он должен вас запустить:

library(plotly)
library(dplyr)

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(list(title = 'Cost'), barmode = 'stack') %>%
  layout(colorway = ramp.list2) %>%
  config(displayModeBar = FALSE)

enter image description here

...