使用prop.table()生成比例表后如何实现可视化绘图
解决思路和实现方法
第一步:转换prop.table结果为结构化数据框
prop.table()输出的结果本质是table类或矩阵对象,直接调用as.data.frame()即可转换为长格式数据框,自动拆分出各维度列和比例值列:
# 示例:先构造交叉频数表并计算行比例 data_table <- table(mtcars$cyl, mtcars$am, dnn = c("气缸数", "变速箱类型")) # margin=1表示按行计算占比,margin=2为按列计算,不填为全局占比 prop_tb <- prop.table(data_table, margin = 1) # 转换为数据框 df_prop <- as.data.frame(prop_tb) # 重命名比例列,提升可读性 colnames(df_prop)[ncol(df_prop)] <- "占比"
如果需要宽格式数据,可使用tidyr::pivot_wider()或reshape2::dcast()转换,大部分绘图场景下长格式数据更易用。
第二步:按场景选择可视化方案
- 一维比例表(单变量占比)
适合绘制柱状图、饼图、环形图,ggplot2实现示例:library(ggplot2) # 构造一维比例表示例 prop_1d <- prop.table(table(mtcars$cyl)) df_1d <- as.data.frame(prop_1d, responseName = "占比") # 绘制占比柱状图 ggplot(df_1d, aes(x = Var1, y = 占比)) + geom_col(fill = "steelblue") + scale_y_continuous(labels = scales::percent) + labs(x = "气缸数", y = "占比") - 二维比例表(双变量交叉占比)
适合绘制百分比堆叠柱状图、热力图、马赛克图:
若使用base R绘图,也可以直接对# 百分比堆叠柱状图示例 ggplot(df_prop, aes(x = 气缸数, y = 占比, fill = 变速箱类型)) + geom_col(position = "stack") + scale_y_continuous(labels = scales::percent) # 热力图示例 ggplot(df_prop, aes(x = 气缸数, y = 变速箱类型, fill = 占比)) + geom_tile(color = "white") + geom_text(aes(label = scales::percent(占比, accuracy = 0.1)))prop.table输出的table对象绘制马赛克图,无需提前转换格式:mosaicplot(prop_tb, main = "不同气缸数的变速箱类型占比", color = c("lightblue", "orange"))
小提示:如果计算的是列比例,调整x轴和填充映射的变量即可匹配展示逻辑。
内容的提问来源于stack exchange,提问作者zoe
相关产品推荐
相关产品推荐

