比例可视化 草图笔记由@sketchthedocs绘制 :---: 比例可视化 - 草图笔记由@nitya绘制 在这节课中,你将使用一个不同的以自然为主题的数据集来可视化比例,例如在一个关于蘑菇的数据集中,有多少不同类型的真菌存在。让我们通过Audubon提供的数据集来探索这些迷人的真菌,该数据集列出了Agaricus和Lepiota科的23种有柄蘑菇的详细信息。你将尝试一些美味的可视化方法,如: 饼图 环形图 华夫饼图 微软研究院的一个非常有趣的项目叫Charticulator,它提供了一个免费的拖放式数据可视化界面。在他们的一篇教程中也使用了这个蘑菇数据集!因此你可以同时探索数据和学习库:Charticulator教程。 课前测验 了解你的蘑菇 蘑菇非常有趣。
![]() |
|---|
| 比例可视化 - 草图笔记由@nitya绘制 |
在这节课中,你将使用一个不同的以自然为主题的数据集来可视化比例,例如在一个关于蘑菇的数据集中,有多少不同类型的真菌存在。让我们通过Audubon提供的数据集来探索这些迷人的真菌,该数据集列出了Agaricus和Lepiota科的23种有柄蘑菇的详细信息。你将尝试一些美味的可视化方法,如:
微软研究院的一个非常有趣的项目叫Charticulator,它提供了一个免费的拖放式数据可视化界面。在他们的一篇教程中也使用了这个蘑菇数据集!因此你可以同时探索数据和学习库:Charticulator教程。
蘑菇非常有趣。让我们导入一个数据集来研究它们:
import pandas as pd import matplotlib.pyplot as plt mushrooms = pd.read_csv('data/mushrooms.csv') mushrooms.head()
输出了一些很棒的数据表,用于分析:
| 类别 | 菌盖形状 | 菌盖表面 | 菌盖颜色 | 擦伤 | 气味 | 菌褶附着 | 菌褶间距 | 菌褶大小 | 菌褶颜色 | 菌柄形状 | ... | 菌柄表面下环 | 菌柄上环颜色 | 菌柄下环颜色 | 蛛网类型 | 蜘蛛网颜色 | 环数 | 环类型 | 孢子打印颜色 | 种群 | 栖息地 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 有毒 | 凸形 | 光滑 | 棕色 | 擦伤 | 刺鼻 | 自由 | 密集 | 狭窄 | 黑色 | 扩大 | ... | 光滑 | 白色 | 白色 | 部分 | 白色 | 一 | 垂直 | 黑色 | 分散 | 城市 |
| 可食用 | 凸形 | 光滑 | 黄色 | 擦伤 | 杏仁 | 自由 | 密集 | 宽阔 | 黑色 | 扩大 | ... | 光滑 | 白色 | 白色 | 部分 | 白色 | 一 | 垂直 | 棕色 | 多数 | 草地 |
| 可食用 | 钟形 | 光滑 | 白色 | 擦伤 | 甘草 | 自由 | 密集 | 宽阔 | 棕色 | 扩大 | ... | 光滑 | 白色 | 白色 | 部分 | 白色 | 一 | 垂直 | 棕色 | 多数 | 草地 |
| 有毒 | 凸形 | 有鳞 | 白色 | 擦伤 | 刺鼻 | 自由 | 密集 | 狭窄 | 棕色 | 扩大 | ... | 光滑 | 白色 | 白色 | 部分 | 白色 | 一 | 垂直 | 黑色 | 分散 | 城市 |
你立刻注意到所有的数据都是文本形式。你需要将这些数据转换成可以用于图表的形式。实际上,大多数数据是以对象形式表示的:
print(mushrooms.select_dtypes(["object"]).columns)
输出结果如下:
Index(['class', 'cap-shape', 'cap-surface', 'cap-color', 'bruises', 'odor', 'gill-attachment', 'gill-spacing', 'gill-size', 'gill-color', 'stalk-shape', 'stalk-root', 'stalk-surface-above-ring', 'stalk-surface-below-ring', 'stalk-color-above-ring', 'stalk-color-below-ring', 'veil-type', 'veil-color', 'ring-number', 'ring-type', 'spore-print-color', 'population', 'habitat'], dtype='object')
将这些数据转换为“类别”列为分类:
cols = mushrooms.select_dtypes(["object"]).columns mushrooms[cols] = mushrooms[cols].astype('category')
edibleclass=mushrooms.groupby(['class']).count() edibleclass
现在,如果你打印出蘑菇数据,可以看到它已经按照有毒/可食用类别进行了分组:
| 菌盖形状 | 菌盖表面 | 菌盖颜色 | 擦伤 | 气味 | 菌褶附着 | 菌褶间距 | 菌褶大小 | 菌褶颜色 | 菌柄形状 | ... | 菌柄表面下环 | 菌柄上环颜色 | 菌柄下环颜色 | 蛛网类型 | 蛛网颜色 | 环数 | 环类型 | 孢子打印颜色 | 种群 | 栖息地 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 类别 | |||||||||||||||||||||
| 可食用 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | ... | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 |
| 有毒 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | ... | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 |
如果你按照这张表格中显示的顺序创建类别标签,就可以构建一个饼图:
labels=['Edible','Poisonous'] plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%') plt.title('Edible?') plt.show()
哇哦,一个饼图展示了根据这两种蘑菇类别划分的数据比例。确保标签的顺序正确非常重要,特别是在这里,所以要验证标签数组的构建顺序!

一种更有趣的饼图是环形图,它是一个中间有洞的饼图。让我们用这种方法来看看我们的数据。
看看蘑菇生长的各种栖息地:
habitat=mushrooms.groupby(['habitat']).count() habitat
这里,你按栖息地对数据进行分组。有7个栖息地列出,所以把这些作为你的环形图的标签:
labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood'] plt.pie(habitat['class'], labels=labels, autopct='%1.1f%%', pctdistance=0.85) center_circle = plt.Circle((0, 0), 0.40, fc='white') fig = plt.gcf() fig.gca().add_artist(center_circle) plt.title('Mushroom Habitats') plt.show()

这段代码绘制了一个图表和一个中心圆,然后将这个中心圆添加到图表中。通过更改0.40的值来调整中心圆的宽度。
环形图可以通过多种方式调整以改变标签。特别是,可以通过突出显示标签来提高可读性。了解更多内容请参阅文档。
现在你知道如何对数据进行分组并以饼图或环形图的形式展示数据后,你可以探索其他类型的图表。尝试一下华夫饼图,这是一种不同的方式来探索数量。
“华夫饼”类型的图表是一种不同的方式,将数量可视化为二维方阵。尝试可视化这个数据集中不同颜色的菌盖数量。为此,你需要安装一个辅助库叫做PyWaffle,并使用Matplotlib:
pip install pywaffle
选择数据的一部分进行分组:
capcolor=mushrooms.groupby(['cap-color']).count() capcolor
通过创建标签并分组数据来创建华夫饼图:
import pandas as pd import matplotlib.pyplot as plt from pywaffle import Waffle data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'], 'amount': capcolor['class'] } df = pd.DataFrame(data) fig = plt.figure( FigureClass = Waffle, rows = 100, values = df.amount, labels = list(df.color), figsize = (30,30), colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"], )
通过华夫饼图,你可以清楚地看到这个蘑菇数据集中菌盖颜色的比例。有趣的是,有很多绿色菌盖的蘑菇!

✅ Pywaffle支持在图表中使用任何Font Awesome图标。做一些实验,用图标而不是方块创建一个更有趣的华夫饼图。
在这节课中,你学习了三种可视化比例的方法。首先,你需要将数据分组到类别中,然后决定哪种方法最适合展示数据——饼图、环形图还是华夫饼图。所有这些方法都很美味,并且可以瞬间给用户一个数据集的快照。
尝试在Charticulator中重现这些美味的图表。
有时很难确定何时使用饼图、环形图或华夫饼图。阅读以下文章以获取更多信息:
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
做一些研究以找到更多关于这个棘手决策的信息。
**声明**: 本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。