news 2026/9/13 12:56:30

用 R 可视化蘑菇数据集比例:饼图、环形图与华夫饼图实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 R 可视化蘑菇数据集比例:饼图、环形图与华夫饼图实战

用 R 可视化蘑菇数据集比例:饼图、环形图与华夫饼图实战

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

本篇文章基于 Data Science for Beginners 课程第 11 课(R 语言版),以蘑菇数据集为核心,系统讲解如何在 R 中把文本型分类数据聚合成比例,并用饼图(Pie Chart)、环形图(Donut Chart)与华夫饼图(Waffle Chart)三种图表完成比例可视化。读完本文,你将掌握dplyr分组聚合、pie()基础绘图、webr库的PieDonut()环形图以及waffle库华夫饼图的完整使用流程,并理解标签顺序对比例图准确性的关键影响。

认识蘑菇数据集

本节实验数据来自美国奥杜邦协会(Audubon)发布的蘑菇数据集,包含伞菌科 Agaricus 与 Lepiota 两个属共 23 种有菌褶蘑菇的观测记录。在仓库中该数据位于 data/mushrooms.csv,共 8124 条样本,其中可食用(Edible)4208 条、有毒(Poisonous)3916 条。

首先将数据集读入 R,并查看前几行:

mushrooms = read.csv('data/mushrooms.csv') head(mushrooms)

打印出的表格包含丰富的分析字段:

classcap-shapecap-surfacecap-colorbruisesodorgill-attachmentgill-spacinggill-sizegill-colorstalk-shapestalk-rootstalk-surface-above-ringstalk-surface-below-ringstalk-color-above-ringstalk-color-below-ringveil-typeveil-colorring-numberring-typespore-print-colorpopulationhabitat
PoisonousConvexSmoothBrownBruisesPungentFreeCloseNarrowBlackEnlargingEqualSmoothSmoothWhiteWhitePartialWhiteOnePendantBlackScatteredUrban
EdibleConvexSmoothYellowBruisesAlmondFreeCloseBroadBlackEnlargingClubSmoothSmoothWhiteWhitePartialWhiteOnePendantBrownNumerousGrasses
EdibleBellSmoothWhiteBruisesAniseFreeCloseBroadBrownEnlargingClubSmoothSmoothWhiteWhitePartialWhiteOnePendantBrownNumerousMeadows
PoisonousConvexScalyWhiteBruisesPungentFreeCloseNarrowBrownEnlargingEqualSmoothSmoothWhiteWhitePartialWhiteOnePendantBlackScatteredUrban
EdibleConvexSmoothGreenNo BruisesNoneFreeCrowdedBroadBlackTaperingEqualSmoothSmoothWhiteWhitePartialWhiteOneEvanescentBrownAbundantGrasses
EdibleConvexScalyYellowBruisesAlmondFreeCloseBroadBrownEnlargingClubSmoothSmoothWhiteWhitePartialWhiteOnePendantBlackNumerousGrasses

可以看到全部字段都是文本型(类别型)数据。用names()查看列名,R 会自动把 CSV 中的连字符转换为点号:

names(mushrooms)

输出如下,共 23 个字段:

[1] "class" "cap.shape" [3] "cap.surface" "cap.color" [5] "bruises" "odor" [7] "gill.attachment" "gill.spacing" [9] "gill.size" "gill.color" [11] "stalk.shape" "stalk.root" [13] "stalk.surface.above.ring" "stalk.surface.below.ring" [15] "stalk.color.above.ring" "stalk.color.below.ring" [17] "veil.type" "veil.color" [19] "ring.number" "ring.type" [21] "spore.print.color" "population" [23] "habitat"

在使用图表展示比例之前,需要把数据按类别聚合。借助dplyr的管道操作,按class(有毒/可食用)分组并统计样本数:

library(dplyr) grouped=mushrooms %>% group_by(class) %>% summarise(count=n())

View(grouped)查看聚合结果:

classcount
Edible4208
Poisonous3916

这个统计结果与源数据文件 data/mushrooms.csv 中两类样本的实际计数完全一致(可食用 4208、有毒 3916),可作为分组聚合正确性的验证依据。接下来就可以按照表中 Edible、Poisonous 的顺序构建饼图了。

饼图:一图看懂可食用与有毒蘑菇的比例

R 自带的基础绘图函数pie()可以直接接受数值向量与标签向量:

pie(grouped$count,grouped$class, main="Edible?")

运行后即可得到展示可食用与有毒蘑菇比例的饼图:

⚠️关键点:标签顺序必须与数值向量顺序一一对应。pie()按位置配对countclass,如果标签数组的顺序与聚合结果不一致,图表含义会完全颠倒。因此务必反复核对grouped表中类别与计数的先后次序。

环形图:多类栖息地比例一目了然

环形图(Donut Chart)本质上是中间挖空一块的饼图,观感更清爽,也便于在中心区域额外标注信息。下面用蘑菇的栖息地(habitat)字段做演示。

先用dplyr按栖息地分组聚合:

library(dplyr) habitat=mushrooms %>% group_by(habitat) %>% summarise(count=n()) View(habitat)

输出结果:

habitatcount
Grasses2148
Leaves832
Meadows292
Paths1144
Urban368
Waste192
Wood3148

共 7 类栖息地,将它们作为环形图的标签。这里借助webr库的PieDonut()函数,一行代码即可生成带百分比标注的环形图:

library(ggplot2) library(webr) PieDonut(habitat, aes(habitat, count=count))

这段代码同时使用了ggplot2webr两个库,PieDonut函数封装了环形图的核心绘制逻辑。此外,仅使用ggplot2也可以手工构造环形图(例如用geom_bar()结合coord_polar()并挖空中心),本课程的配套解决方案见 3-Data-Visualization/11-visualization-proportions/solution/notebook.ipynb,可作为延伸练习的参考。

华夫饼图:用方格阵列表达数量比例

华夫饼图(Waffle Chart)以二维方格阵列的形式展示数量比例——每个方格代表一定数量的样本,方格密度直观反映各类别占比。这里用蘑菇的菌盖颜色(cap.color)字段做演示。

首先从 CRAN 安装waffle辅助库:

install.packages("waffle", repos = "https://cinc.rud.is")

然后按菌盖颜色分组聚合:

library(dplyr) cap_color=mushrooms %>% group_by(cap.color) %>% summarise(count=n()) View(cap_color)

接下来为每组数量命名,并生成华夫饼图。注意这里把计数除以 10,即每个方格代表 10 朵蘑菇,从而控制方格总量:

library(waffle) names(cap_color$count) = paste0(cap_color$cap.color) waffle((cap_color$count/10), rows = 7, title = "Waffle Chart")+scale_fill_manual(values=c("brown", "#F0DC82", "#D2691E", "green", "pink", "purple", "red", "grey", "yellow","white"))

华夫饼图可以清晰看出菌盖颜色的比例分布。有趣的是,数据集中绿色菌盖的蘑菇数量相当可观——这也是不同图表类型带来的观察视角差异。

小结:三种比例图的选型与核心要点

本课用同一个蘑菇数据集演示了三种比例可视化方法,统一的工作流是:先分组聚合数据,再选择合适的图形展示

图表类型适用场景核心函数/库注意要点
饼图类别较少(2~5 类)的整体占比pie()标签顺序必须与数值一一对应
环形图多类别占比且希望在中心补充信息webr::PieDonut()7 类以上可考虑条形图替代
华夫饼图以方格密度直观表达数量比例waffle::waffle()通过除法控制每个方格代表的样本量

三者都能让读者在几秒内对数据集形成直观的比例印象。若想进一步练习,可尝试在 Charticulator。

此外,本课程在 Python 版本中提供了同一主题的等价实现(使用matplotlibpywaffle),Notebook 位于 3-Data-Visualization/11-visualization-proportions/notebook.ipynb,R 与 Python 两版代码可以对照学习,帮助理解比例可视化在不同语言生态中的通用思路。

说明:本文章节基于课程翻译文档 translations/en/3-Data-Visualization/R/11-visualization-proportions/README.md 整理,原始课程图稿可参考 sketchnotes/11-Visualizing-Proportions.png。

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 12:54:50

Neon proxy 如何在本地搭配 Docker Postgres 与自签证书测试 TLS 连接

Neon proxy 如何在本地搭配 Docker Postgres 与自签证书测试 TLS 连接 【免费下载链接】neon Neon: Serverless Postgres. We separated storage and compute to offer autoscaling, code-like database branching, and scale to zero. 项目地址: https://gitcode.com/GitHub…

作者头像 李华
网站建设 2026/9/13 12:49:37

LangChain、LangGraph与LangSmith:LLM工程化三大框架实战解析

1. 项目概述:LLM工程化三大框架的协同价值在大模型应用开发领域,LangChain、LangGraph和LangSmith这三个框架正在形成技术闭环。作为同源技术栈,它们分别解决了LLM工程化中的不同维度问题:LangChain提供模块化组件组装能力&#x…

作者头像 李华
网站建设 2026/9/13 12:48:00

汽车电子嵌入式系统中C++14的工程化落地实践

1. 这不是教科书里的C14,而是ECU里跑得稳、测得过、量产扛得住的代码 你手头正调试一个ADAS域控制器的CAN FD报文解析模块,编译器报错说 std::make_unique 不识别;或者你在写AUTOSAR BSW层的诊断服务时,发现 constexpr if 能省…

作者头像 李华
网站建设 2026/9/13 12:45:42

鸟巢检测数据集与YOLO训练全流程:VOC格式转换、参数调优与排错指南

简介:针对输电线路智能巡检场景,该VOC格式数据集聚焦鸟巢目标检测任务,可支撑算法验证、模型训练与效果评估,适合电力视觉研究者、算法工程师及目标检测方向学习者使用。资源包约814.44MB,共包含2461张jpg图片、2461个…

作者头像 李华