ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Data-Science-For-Beginners 第 11 课(R 版):用 R 的饼图、环形图与华夫图可视化数据比例

Data-Science-For-Beginners 第 11 课(R 版):用 R 的饼图、环形图与华夫图可视化数据比例 Data-Science-For-Beginners 第 11 课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 仓库中爱沙尼亚语 R 语言版第 11 课文档 translations/et/3-Data-Visualization/R/11-visualization-proportions/README.md讲解如何使用 R 语言配合dplyr、webr与waffle包基于蘑菇数据集完成分组计数 → 饼图 / 环形图 / 华夫图的完整比例可视化流程。读完后你可以独立复现课程中的三类图表并理解每一行 R 代码在数据处理与绘图环节中的作用。课程背景与数据集本课属于仓库 3-Data-Visualization 章节中的比例可视化部分与 Python 版 第 11 课 并行是 R 语言教学路径位于3-Data-Visualization/R/目录下从第 09 课到第 13 课中的一节。课程目标是在蘑菇数据集上实验三种口味十足的比例图表饼图Pie chart环形图Donut chart华夫图Waffle chart课程使用的数据集是仓库根目录的 data/mushrooms.csv源自 Audubon 物种名录中关于 23 种伞菌科Agaricus 与 Lepiota 属蘑菇的详细信息。实际查看该文件可以确认表头共23 列包括class可食/有毒、cap-shape、cap-surface、cap-color、odor、gill-spacing、stalk-shape、veil-type、ring-number、spore-print-color、population、habitat等全表共8124 条记录8125 行含表头所有字段均为文本型R 中读取后默认是 character 类型因此任何统计绘图前都需要先做分组聚合。路径提示R 版课程文档中的导入语句写作read.csv(../../data/mushrooms.csv)这是相对于课时目录3-Data-Visualization/R/11-visualization-proportions/的相对路径。但按仓库实际结构该相对路径指向的3-Data-Visualization/data/目录并不存在数据集实际位于仓库根目录的data/mushrooms.csv。实际运行时请以你的工作目录为准调整路径例如在仓库根目录下执行时使用read.csv(data/mushrooms.csv)。导入数据并预览前几行mushrooms read.csv(data/mushrooms.csv) head(mushrooms)输出示例前几行classcap-shapecap-surfacecap-colorbruisesodorgill-attachment...populationhabitatPoisonousConvexSmoothBrownBruisesPungentFree...ScatteredUrbanEdibleConvexSmoothYellowBruisesAlmondFree...NumerousGrassesEdibleBellSmoothWhiteBruisesAniseFree...NumerousMeadowsPoisonousConvexScalyWhiteBruisesPungentFree...ScatteredUrban查看列名时有一个值得注意的 R 细节。原课程文档中的输出是names(mushrooms)[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] habitatCSV 文件中的列名是cap-shape连字符而names()输出的是cap.shape点号。这是 R 的read.csv()默认check.names TRUE行为不合法的变量名会被make.names()规范化为合法名。因此后续所有代码引用列时都必须用点号写法如cap.color、gill.spacing与 Python 版课程直接写字符串列名mushrooms[cap-color]的思路不同。第一步用 dplyr 分组计数比例图的前提是先算出各类别的计数。课程使用dplyr的%%管道完成分组汇总library(dplyr) grouped mushrooms %% group_by(class) %% summarise(count n()) View(grouped)结果按class分为可食 / 有毒两类classcountEdible4208Poisonous3916这一结果可以用仓库中的原始数据独立验证对data/mushrooms.csv的class列做频次统计得到 Edible 4208、Poisonous 3916合计 8124与表格完全一致。summarise(count n())中n()在分组汇总上下文里返回当前组的行数因此每个类别得到一行计数。若想让计数结果以固定顺序呈现例如 Edible 在前、Poisonous 在后可以在汇总后追加arrange(count)或显式重排这一点直接影响下面饼图标签的对应关系。饼图用基础 R 的 pie() 画可食性比例分组完成后即可画饼图。课程给出的代码非常简洁pie(grouped$count, grouped$class, main Edible?)第一个参数grouped$count是各扇区的数值4208 与 3916第二个参数位置对应pie()的labels形参因此传入grouped$class为每个扇区附上类别标签main设置图表标题。课程特别提醒标签顺序必须与数值顺序严格一致。在可食 / 有毒这种二分类中如果标签顺序与计数顺序错位图表会给出完全错误的比例结论。因此绘制前务必先打印grouped确认两行的排列顺序再构造标签数组。这正是课程强调验证 label 数组的构造顺序的原因。环形图webr 的 PieDonut 呈现栖息地分布环形图是中间有洞的饼图视觉上更利于在中心放置文字。本课换一个维度——蘑菇生长的栖息地habitatlibrary(dplyr) habitat mushrooms %% group_by(habitat) %% summarise(count n()) View(habitat)分组结果为 7 个栖息地类别habitatcountGrasses2148Leaves832Meadows292Paths1144Urban368Waste192Wood3148用原始数据核对habitat列恰好有 7 个取值频次统计与上表一致Wood 最多为 3148Waste 最少为 192合计仍为 8124。绘制环形图使用ggplot2生态中的webr包的PieDonut()函数library(ggplot2) library(webr) PieDonut(habitat, aes(habitat, count count))代码要点PieDonut(habitat, ...)的第一个参数直接接收上一步dplyr输出的两列数据框类别列 计数列与ggplot2的geom_*函数保持相同的data aes()调用风格aes(habitat, count count)声明以habitat为类别、count为数值的映射因此环形图各扇区自动按habitat着色并附图例因为类别只有 7 个标签量适中环形图比 9 类以上的饼图更易读。课程还指出仅用ggplot2本身也能绘制环形图例如用coord_polar()把条形图卷成环可作为不引入webr包的替代路线自行尝试。华夫图waffle 包把计数铺成二维方格阵华夫图Waffle chart把数量表示为二维方格阵列每个方格代表固定数量的记录类别按颜色填充。本课用它展示菌盖颜色cap-color的构成。首先安装辅助包waffle位于第三方 CRAN 镜像仓库安装命令需显式指定 reposinstall.packages(waffle, repos https://cinc.rud.is)对菌盖颜色分组计数library(dplyr) cap_color mushrooms %% group_by(cap.color) %% summarise(count n()) View(cap_color)用原始数据核对cap.color共 9 个取值计数从高到低为cap.colorcountBrown2284Green1856Red1500Yellow1072White1040Buff168Pink144Cinnamon44Purple16绘图代码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))逐行解读names(cap_color$count) paste0(cap_color$cap.color)把颜色名Buff、Brown、…写入计数向量的元素名waffle()依据这些名称生成图例与填充因子cap_color$count / 10是刻度的关键华夫图按方格数绘制若直接用原始计数总和 8124方格阵会大得无法呈现除以 10 后每格约代表 10 条记录图面保持可读各类别方格数约为 228、186、150、107、104、17、14、4、2rows 7固定行数为 7宽度由总方格数自动推得title设置标题scale_fill_manual(values c(...))手动指定填充色使图面颜色尽量贴近真实菌盖色相如棕色系、绿色系。需要注意的是手动颜色向量按位置与填充因子的水平类别顺序对齐当类别增减时请同步调整该向量避免颜色错位。从成图可以直接看出棕色菌盖最多而绿色菌盖Green1856 条出乎意料地多这正是课程指出的很多蘑菇是绿菌盖的直观来源。三种图表如何取舍课程小结的决策路径是先按目标维度分组计数再在饼图、环形图、华夫图之间选择呈现方式饼图类别少25 类、想强调部分占整体时用如可食/有毒二分类环形图类别稍多本课 7 类栖息地、需要在中心留白或放标题说明时用华夫图想让读者数格子获得数量感、或对颜色有语义表达菌盖色相时用但需要自己处理计数缩放如除以 10与行数列数。三者都给出数据集的即时快照但都只适合类别较少、以占比为核心的场景当需要精确比较绝对数值或展示趋势时应回到第 0910 课的柱状图 / 分布图方法参见 R 版第 09 课 与 R 版第 10 课。练习与延伸课后任务爱沙尼亚语版第 11 课提供 Excel 练习文档 translations/et/3-Data-Visualization/11-visualization-proportions/assignment.md对应英文版 assignment可以用电子表格复现同样的比例图。对照阅读同一主题的 Python 版课程 3-Data-Visualization/11-visualization-proportions/README.md 使用pandas.groupby()替代dplyr分组、用matplotlib的plt.pie()加中心白圆实现环形图、用pywaffle包实现华夫图可对照理解两种语言栈在分组—计数—绘图链条上的差异。课程挑战文档建议使用 Microsoft Research 的 Charticulator 拖拽式工具其教程之一同样基于这份蘑菇数据集重新绘制这三类图表以检验不写代码也能表达相同比例信息。运行环境说明本课代码依赖 R 基础图形系统以及dplyr、ggplot2、webr、waffle四个包其中waffle需按上文命令从指定第三方仓库安装。数据文件data/mushrooms.csv已随仓库提供无需额外下载。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表