Сгруппировать гистограмму по другому столбцу в plotly (R)

Как я могу получить гистограмму, сгруппированную по состоянию, используя R в plotly?

Моему желаемому результату должен понравиться этот образец диаграммы, сделанный в Excel: Щелкните здесь, чтобы увидеть изображение

Мои данные:

data <- data.frame(
  State = c(
    "Tennessee", "Tennessee", "Tennessee", "Tennessee",
    "Kentucky", "Kentucky", "Kentucky", "Kentucky", "Kentucky",
    "Georgia", "Georgia", "Georgia"
  ),
  City = c(
    "Chattanooga", "Knoxville", "Memphis", "Nashville",
    "Covington", "Owensboro", "Bowling Green", "Lexington", "Louisville",
    "Columbus City", "Augusta", "Atlanta City"
  ),
  Population = c(
    177571, 186239, 652717, 660388,
    40640, 57265, 58067, 295803, 597337,
    189885, 195844, 420033
  )
)

Мой код:

plot_ly() %>%
  add_trace(
    x = ~City,
    y = ~Population,
    type = 'bar',
    name = 'Population')

person Xenedra    schedule 31.05.2017    source источник


Ответы (2)


In ggplot:

data <- data.frame(State, City, Population)
colnames(data)<-c("category","subcategory","population")

ggplot(data, aes(category, population)) +   
  geom_bar(aes(fill = category, color=subcategory), position = "dodge", stat="identity")+
  theme_minimal() +
  scale_color_manual(values=c(rep("white", 17))) +
  theme(legend.position="none") 

решение ggplot2

и, используя ggplotly:

ggplotly()

введите здесь описание изображения

person shosaco    schedule 31.05.2017
comment
Есть ли способ сделать это без использования ggplot или ggplotly? Это в shinyapp с множеством других диаграмм, и мне нужно иметь возможность использовать тот же дизайн, что и другие диаграммы, которые только что созданы с использованием plotly. Кроме того, есть ли способ исправить интервал? - person Xenedra; 31.05.2017

Так может выглядеть чисто сюжетное решение. С разными подкатегориями вы должны использовать подзаголовки:

data %>% 
  mutate(State = factor(State, levels = c("Tennessee", "Kentucky", "Georgia"))) %>% 
  split(.$State) %>% 
  purrr::imap(function(x, y) {
    mutate(x, City = reorder(City, Population)) %>% 
      plot_ly() %>%
      add_bars(x = ~City,
               y = ~Population,
               color = ~State,
               colors = c(Tennessee = '#1f77b4',  # muted blue
                          Kentucky = '#ff7f0e',  # safety orange
                          Georgia = '#2ca02c'  # cooked asparagus green"
               )) %>% 
      layout(xaxis = list(tickvals = (nrow(x) -1) / 2, ticktext = y))}
    ) %>%
  subplot(shareY = TRUE)

введите здесь описание изображения

person stefan    schedule 09.06.2020