用 Python 创建树状图(GNI 数据分析特辑)
许多人喜欢使用数据可视化来直观地理解复杂的信息,而树状图就是一个很好的工具。

在本篇文章中,我们将向您展示如何用 Python 创建一个树状地图,并用它来分析 2014 年各国的国民总收入 (GNI)。
什么是树形地图?
树状地图是将分层数据可视化为矩形的一种方法。 矩形的大小表示该数据的值,而 其他颜色分开。
Python 代码说明
1. 安装并加载所需的软件包
在 Python 中, 大熊猫, matplotlib, 平方和 rpy2 软件包。首先,安装并加载所需的软件包。
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
import squarify
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
# 在 MacOS 上设置韩文字体
font_path = '/Library/Fonts/Arial Unicode.ttf' # 更改为实际字体文件路径
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)
# 安装必要的软件包(如果需要安装的话)
# !pip install pandas matplotlib squarify rpy2
# 使用 Rpy2 安装和加载 R 软件包
robjects.r('install.packages("treemap", repos="http://cran.us.r-project.org")')
robjects.r('library(treemap)')- Pandas:一个为 Python 数据分析提供高性能数据结构和数据分析工具的库。通过 DataFrame 对象,可以轻松操作和分析数据。
- Matplotlib:这是一个允许您以多种方式在 Python 中实现数据可视化的库。您可以创建绘图、图形、直方图等。
- Squarify:一个生成树状图的 Python 库。通过它,您可以直观地看到矩形数据的相对大小。
- Rpy2:R 和 Python 之间的接口,可将数据集从 R 导入 Python。
2. 导入和预处理数据
rpy2使用 R's 树状图 套餐来加载和预处理 GNI 提供的 GNI2014 数据集。我在 Python 软件包中没有找到任何可以使用的东西,因此我借用了 R 软件包中的数据。
将 # R 数据转换为 pandas DataFrame
pandas2ri.activate()
从 # R 的 treemap 包中导入 GNI2014 数据集
robjects.r('data("GNI2014")')
GNI2014 = robjects.r('as.data.frame(GNI2014)')
GNI2014 = pandas2ri.rpy2py(GNI2014)
为国民总收入排名前 # 和前 25% 的国家添加标签
GNI2014['label'] = GNI2014.apply(lambda x: x['country'] if x['GNI'] > GNI2014['GNI'].quantile(0.75) else '', axis=1)3. 创建树状地图
现在 平方和 matplotlib创建树状地图。
创建 # 树状地图
plt.figure(figsize=(12, 8))
colours = plt.cm.viridis(GNI2014['GNI'] / max(GNI2014['GNI']))
squarify.plot(sizes=GNI2014['GNI'], label=GNI2014['label'], color=colours, alpha=.8)
plt.axis('off')
plt.title('GNI 2014 数据集树状图', fontsize=20)
plt.suptitle('各国国民总收入比较', fontsize=16)
plt.show()解读结果
运行上述代码后,您将得到一个树状地图,可以直观地比较不同国家的国民总收入,如帖子顶部所示。 每个矩形的大小代表该国的国民总收入,颜色则根据国民总收入的数值而变化。
常见问题
- 我能用熊猫做什么?
- Pandas 使用数据帧来读取、写入、操作和分析数据。您可以轻松完成导入 CSV 文件或选择特定数据列等操作。 - Matplotlib 和其他可视化库有什么区别?
- Matplotlib 非常灵活,可以创建多种不同类型的图表,但对于初学者来说,使用起来可能比较复杂。Seaborn 基于 Matplotlib,可提供更简单的可视化效果,而 Plotly 则可轻松创建交互式图表。 - Squarify 何时有用?
- Squarify 可帮助您创建树状图。树状图能帮助你直观地比较数据,尤其适用于直观地阐明分层数据或比较。 - 树状地图库提供哪些功能?
- 树状地图库为树状地图可视化提供数据集,并帮助您使用示例数据进行练习。在这里,我们使用 load_gni2014 函数加载 2014 年国民总收入数据。 - 创建树状地图时,如何设置每个矩形的颜色不同?
- 您可以同时使用 Squarify 和 Matplotlib 来设置颜色,也可以使用 plt.cm.viridis 等色谱图根据数据值来着色。 - apply 函数在数据预处理中的作用是什么?
- 应用函数允许您对数据帧中的每一行或每一列应用一个函数。在这里,如果每个国家的国民总收入排在前 25% 位,就可以使用该函数添加国名作为标签。
完整代码和包装
最后,让我们来清理整个代码。
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
import squarify
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
# 在 MacOS 上设置韩文字体
font_path = '/Library/Fonts/Arial Unicode.ttf' # 更改为实际字体文件路径
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)
# 安装所需的软件包(如果需要安装的话)
# !pip install pandas matplotlib squarify rpy2
# 使用 Rpy2 安装和加载 R 软件包
robjects.r('install.packages("treemap", repos="http://cran.us.r-project.org")')
robjects.r('library(treemap)')
将 # R 数据转换为 pandas DataFrame
pandas2ri.activate()
在 # R 中从 treemap 包加载 GNI2014 数据集
robjects.r('data("GNI2014")')
GNI2014 = robjects.r('as.data.frame(GNI2014)')
GNI2014 = pandas2ri.rpy2py(GNI2014)
为国民总收入排名前 # 和前 25% 的国家添加标签
GNI2014['label'] = GNI2014.apply(lambda x: x['country'] if x['GNI'] > GNI2014['GNI'].quantile(0.75) else '', axis=1)
生成 # 树状地图
plt.figure(figsize=(12, 8))
colours = plt.cm.viridis(GNI2014['GNI'] / max(GNI2014['GNI']))
squarify.plot(sizes=GNI2014['GNI'], label=GNI2014['label'], color=colours, alpha=.8)
plt.axis('off')
plt.title('GNI 2014 数据集树状图', fontsize=20)
plt.suptitle('各国国民总收入对比', fontsize=16)
plt.show()
在本篇文章中,您将学习如何使用 Python 创建树形图。 利用这些可视化技术,您可以更高效地分析和交流数据。今后,我们将探索更多数据可视化技术!
如果您想用 R 而不是 Python 来查看相同可视化的过程和结果,可以使用 在 R 中可视化树状图:利用 2014 年国民总收入数据集比较各国的国民总收入 (GNI) 看看这篇文章。






