如何在R中基于dataframe的分组行绘制分组箱线图?
R绘制多分组风险得分箱线图解决方案
核心实现逻辑
你当前只输出单个分组箱线图的原因是提前过滤了仅保留POSTEPAY的交易数据,不需要做过滤操作,直接传入全量数据框即可,ggplot会自动按x轴指定的issuer_name维度分组生成所有发卡行的箱线图:
library(ggplot2) # 基础实现代码 ggplot(data = df_risk_score, aes(x = issuer_name, y = risk_score)) + geom_boxplot()
常用效果优化
解决x轴标签重叠问题
由于发卡行名称较长,默认排布会出现文字重叠,可以通过旋转x轴标签解决:
ggplot(data = df_risk_score, aes(x = issuer_name, y = risk_score)) + geom_boxplot() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
实现可变宽度箱线图(和示例参考图效果一致)
添加varwidth = TRUE参数即可让箱线图宽度对应各发卡行的交易样本量,样本量越大箱线越宽:
ggplot(data = df_risk_score, aes(x = issuer_name, y = risk_score)) + geom_boxplot(varwidth = TRUE) + theme(axis.text.x = element_text(angle = 45, hjust = 1))
按风险得分中位数排序优化可读性
可以先对issuer_name按风险得分中位数重排序,更方便直观对比不同发卡行的风险水平差异:
library(dplyr) library(ggplot2) df_risk_score %>% mutate(issuer_name = reorder(issuer_name, risk_score, FUN = median)) %>% ggplot(aes(x = issuer_name, y = risk_score)) + geom_boxplot(varwidth = TRUE) + theme(axis.text.x = element_text(angle = 45, hjust = 1))
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

