在R中用不同的颜色绘制累积直方图

时间:2019-10-14 08:35:15

标签: r graph histogram

我有一个大型数据集(800,000个数据点),其中包含有关5,000多家银行提供的贷款的信息。我正在尝试比较支付最多贷款的前N家银行支付的贷款数量,以及其余银行的支出数量。为此,我制作了数据框banks,该数据框按降序分配的贷款数排序。我还添加了一个列,其中列有相对累积的贷款总和。我能够对此作图,但是我试图制作一个直方图,其中x轴是N表示从1到10的数字,而y轴是前N个银行支付的贷款的百分比。每个条将被分成不同的颜色。例如,第一个条形将是一种颜色,并且仅包括第一个存储体的累加值,第二个条形将是前2个存储体的累加总和,并且将具有两种颜色:从顶部开始,每个存储体都有一个颜色银行。

举一个具体的例子,假设我有一组100笔贷款,其中前5家银行分别发放了20、14、12、12、10笔贷款。

然后,对于N从1到5而言,图应如下所示: enter image description here

并且,如果可能的话,将具有说明每个颜色对应哪个库的图例。

我尝试使用ggplot,但是它不允许我以所需的特定方式定义轴。

我认为这并不难,但是我是使用R的初学者,所以我使用Excel和paint绘制了此直方图。非常感谢!

对于@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 :(得分:0)

尝试以下代码。

您的数据称为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')