R - ggplot2 - 限制分类数据的条形图输出
Posted
技术标签:
【中文标题】R - ggplot2 - 限制分类数据的条形图输出【英文标题】:R - ggplot2 - limit bar chart output for categorical data 【发布时间】:2018-11-24 10:31:27 【问题描述】:我正在尝试在 ggplot2 中创建一个条形图,将 x 轴上的输出限制为前 10% 最常见的分类变量。
我的数据框是一个包含个人贷款统计数据的数据集。我正在研究贷款状态和职业这两个类别之间的关系。
首先,我想将贷款状态限制为已“注销”的贷款。接下来,我想使用条形图绘制不同职业中已注销的贷款数量。 Occupation 有 67 个唯一值 - 我想将绘图限制为仅最常见的职业(按整数或百分比,即“7”或“10%”有效)。
在下面的代码中,我使用forcats 函数fct_infreq
按频率降序排列条形图。但是,我找不到限制 x 轴类别数量的函数。我已经尝试过quantile
、scale_x_discrete
等,但这些似乎不适用于分类数据。
感谢您的帮助!
df %>% filter(LoanStatus %in% c("Chargedoff")) %>%
ggplot() +
geom_bar(aes(fct_infreq(Occupation)), stat = 'count') +
scale_x_discrete(limits = c(quantile(df$Occupation, 0.9), quantile(df$Occupation, 1)))
产生的错误:
(1 - h) * qs[i] 中的错误:二元运算符的非数字参数
更新: 使用以下 Yifu 的答案,我能够得到这样的期望输出:
pd_occupation <- pd %>%
dplyr::filter(LoanStatus == "Chargedoff") %>%
group_by(Occupation) %>%
mutate(group_num = n())
table(pd_occupation$group_num)#to view the distribution
ggplot(subset(pd_occupation, group_num >= 361)) +
geom_bar(aes(fct_infreq(Occupation)), stat = 'count') +
ggtitle('Loan Charge-Offs by Occupation')
【问题讨论】:
请提供具有可重现数据的示例***.com/help/mcve 也许您可以通过forcats::fct_lump
将因子水平集中起来,然后在绘图之前将其子集到非“其他”类别?
【参考方案1】:
您可以改为在dplyr
中执行此操作:
#only use cars whose carb appears more than 7 times to create a plot
mtcars %>%
group_by(carb) %>%
mutate(group_num = n()) %>%
# you can substitute the number with 10% percentitle or whatever you want
dplyr::filter(group_num >= 7) #%>%
#ggplot()
#create your plot
这个想法是过滤观察结果并将其传递给ggplot
,而不是过滤ggplot
中的数据。
【讨论】:
以上是关于R - ggplot2 - 限制分类数据的条形图输出的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化:可视化离散(分类)变量的堆叠的直方图自定义堆叠直方图中不同分组条形的色彩(Histogram for Categorical Variable)自定义轴标签旋转的角度