R语言饼图名称与百分比关联错误问题求助
饼图标签关联错误的修复方案
问题描述
基于包含hydrological_yes和hydrological_no两类的单列数据创建饼图时,标签显示异常:重复显示hydrological_yes,未正确展示hydrological_no与对应百分比;生成的hydrologicalp向量中百分比与名称未正确关联,出现交替重复赋值的情况。
当前使用的代码:
png(file="hydrologicalp.png", width=600, height=400) hydrological <- xname$hydrological hydrologicalp <- paste(hydrological, round((table(hydrological)/sum(table(hydrological)))*100), "%", sep = " ") pie(table(hydrological), label = hydrologicalp, main = "hydrological") dev.off()
异常的hydrologicalp向量输出示例:
hydrologicalp [1] "hydrological_yes 28 %" "hydrological_yes 72 %" [3] "hydrological_yes 28 %" "hydrological_yes 72 %" [5] "hydrological_yes 28 %" "hydrological_yes 72 %" [7] "hydrological_no 28 %" "hydrological_yes 72 %" [9] "hydrological_yes 28 %" "hydrological_yes 72 %" ....... and so on
问题原因
hydrological是原始的单列样本数据(行数等于样本量),而table(hydrological)/sum(...)计算出的是仅2个元素的百分比向量。用paste拼接长向量(原始数据)和短向量(百分比)时,R会自动把短向量循环补齐到长向量的长度,导致每个原始数据元素都被重复拼接两个百分比,最终生成的标签向量长度和原始数据一致,完全不符合饼图「每个类别对应一个标签」的要求。
修复后的代码
png(file="hydrologicalp.png", width=600, height=400) hydrological <- xname$hydrological # 生成类别频数表,自带类别名称 hyd_table <- table(hydrological) # 计算每个类别的百分比并取整 hyd_pct <- round(prop.table(hyd_table) * 100) # 仅针对两个类别拼接名称与对应百分比,生成匹配饼图扇区数量的标签 hydrologicalp <- paste(names(hyd_table), hyd_pct, "%", sep = " ") # 绘制饼图,使用正确的标签向量 pie(hyd_table, labels = hydrologicalp, main = "Hydrological Category Distribution") dev.off()
代码说明
table(hydrological):生成带类别名称的频数表,结果是长度为2的向量,名称为hydrological_yes和hydrological_no,值为对应类别的样本数量。prop.table(hyd_table) * 100:自动将频数转换为百分比占比,无需手动计算总和。paste(names(hyd_table), hyd_pct, "%", sep = " "):仅针对两个类别拼接标签,生成长度为2的向量,和饼图扇区数量完全匹配。- 饼图的
labels参数接受与扇区数量一致的向量,确保每个扇区正确显示对应类别和百分比。
内容的提问来源于stack exchange,提问作者Dnjl_01
相关产品推荐
相关产品推荐

