Построение кумулятивной гистограммы с разными цветами в R - PullRequest
0 голосов
/ 14 октября 2019

У меня большой набор данных (800 000+ точек данных) с информацией о кредитах, предоставленных более 5000 банками. Я пытаюсь сравнить количество кредитов, выданных ведущими банками N, которые предоставляют большинство кредитов, вместе с остальными банками. Для этого я создал фрейм данных banks, который отсортирован по количеству выданных кредитов в порядке убывания. Я также добавил столбец с относительной совокупной суммой выданных кредитов. Мне удалось составить график этого, но я пытаюсь составить гистограмму, где ось X - это число N от 1 до 10, а ось Y - это процент ссуд, выданных лучшими N банками. Каждая полоса будет разделена на разные цвета. Например, первый столбец будет одного цвета и будет содержать совокупные значения только первого банка, второй столбец будет совокупной суммой двух верхних банков и будет иметь два цвета: по одному для каждого банка, начиная с верхнего. банка.

В качестве конкретного примера, скажем, у меня есть набор из 100 ссуд, из которых 5 крупнейших банков выделили по 20, 14, 12, 12, 10 ссуд каждый.

Тогда сюжет должен бытькак показано для N от 1 до 5: enter image description here

И, если возможно, в нем будут легенды, в которых говорится, какой банк соответствует каждому цвету.

Я попытался использовать ggplot, но это не позволяет мне определять оси особым образом, как я хочу их.

Я думаю, что это не так сложно, но я неофит в использовании R, поэтому я сделал этогистограмма с использованием Excel и рисования. Огромное спасибо!

Я сделал следующий тестовый кадр данных согласно предложению @sindri_baldur для примера графика, используя dput():

structure(list(Bank.Name = structure(1:16, .Label = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"), class = "factor"), Loans = c(20, 14, 12, 12, 10, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1)), class = "data.frame", row.names = c(NA, -16L))

1 Ответ

0 голосов
/ 14 октября 2019

Попробуйте следующий код.

Ваши данные называются bnk здесь.

library(dplyr)
N <- 5
# create empty tibble
top_b <- tibble(topn=0, Bank.Name = '', Loans = 0) %>% 
  filter(topn>0)

for (i in 1:N) {
  top_b <- top_b %>% 
    bind_rows( bind_cols(topn = rep(i, i), head(bnk , i)))

}
# factor with opposite direction needed for graph you want
top_b$Bank.Name  <- factor(top_b$Bank.Name, 
                            levels = unique(top_b$Bank.Name)[N:1])

top_b %>% 
  ggplot(aes(x=topn, y=Loans, fill = Bank.Name))+
  geom_bar(stat = 'identity')
...