You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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 = "占比")
    
  • 二维比例表(双变量交叉占比)
    适合绘制百分比堆叠柱状图、热力图、马赛克图:
    # 百分比堆叠柱状图示例
    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)))
    
    若使用base R绘图,也可以直接对prop.table输出的table对象绘制马赛克图,无需提前转换格式:
    mosaicplot(prop_tb, main = "不同气缸数的变速箱类型占比", color = c("lightblue", "orange"))
    

小提示:如果计算的是列比例,调整x轴和填充映射的变量即可匹配展示逻辑。

内容的提问来源于stack exchange,提问作者zoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:54:04