

大家好,我是 Ai 学习的老章
都说一图胜千言,一个优秀的可视化不仅能揭示数据背后隐藏的模式,更能以最直观的方式讲述数据的故事。
D3.js 一直是 Web 可视化领域的黄金标准,它能创造出无与伦比的、富有表现力的交互式图表。然而,对于大多数以 Python 为主要工具的数据科学家和分析师来说,D3.js 的 JavaScript 技术栈无疑是一道难以逾越的鸿沟。
今天向大家介绍一个用 Python 生成 Web 可视化图表的库—— d3blocks
d3blocks 巧妙地将 Python 的数据处理能力与 D3.js 的强大可视化引擎结合起来,只需几行 Python 代码,就能创建出独立、交互式、美观的 D3.js 图表,而无需编写任何一行 JavaScript!

无论是展示复杂的关系网络、分析数据流转、还是探索时序数据的动态变化,d3blocks 都能提供优雅而强大的解决方案。
在众多 Python 可视化库中,d3blocks 凭借其独特的优势脱颖而出:
d3blocks 的 API 设计极其简洁,符合 Python 开发者的使用习惯,专注于数据本身,而非工具的实现细节。d3blocks 生成的图表不是静态图片,而是活的数据故事。用户可以进行缩放、平移、悬停、点击等丰富的交互操作,深入探索数据点之间的联系。d3blocks 充分利用 D3.js 的图形渲染能力,创建的图表不仅信息量大,而且视觉效果出众,足以用于正式的报告、出版物或公开演讲。


通过 pip 即可轻松安装:
pip install d3blocks
体验最新功能,可以强制更新:
pip install -U d3blocks
from d3blocks import D3Blocks
# 初始化 D3Blocks
d3 = D3Blocks()
d3blocks 的核心在于其丰富的“块”(Blocks),每一种块都对应一种强大的 D3.js 图表。让我们来探索其中一些最受欢迎的图表。
网络图是展示实体间复杂关系的利器。
d3graph:经典的交互式网络图d3graph 可以轻松地将关系数据(如社交网络、知识图谱)转换成可交互的网络图。节点可以被拖动,悬停时会高亮显示连接关系。
代码示例:
import pandas as pd
from d3blocks import D3Blocks
# 初始化
d3 = D3Blocks()
# 加载数据
df = pd.read_csv('https://raw.githubusercontent.com/d3blocks/d3blocks/master/d3blocks/data/energy.csv')
# 创建 d3graph
# source, target, weight 是必需的列
d3.d3graph(df)

理解系统中流量、能量或资金的流转是许多分析的关键。
sankey:优雅的桑基图桑基图(Sankey Diagram)是流数据可视化的最佳选择,它用节点的宽度来表示流量的大小,清晰地展示了数据从源到汇的分布情况。
代码示例:
# 使用与 d3graph 相同的 energy 数据集
d3.sankey(df)

chord:和谐的弦图弦图(Chord Diagram)非常适合用来可视化实体之间的对称关系矩阵。它将实体排列在一个圆环上,用弦连接相关的实体,弦的粗细代表关系的强度。
代码示例:
# 加载数据
df = pd.read_csv('https://raw.githubusercontent.com/d3blocks/d3blocks/master/d3blocks/data/energy.csv')
# 创建弦图
d3.chord(df)

d3blocks 提供了动态的方式来展示数据随时间的变化。
movingbubbles:动态气泡图动态气泡图(Moving Bubbles)是一种极具吸引力的可视化方式,尤其适合展示多个类别的数据在时间维度上的竞争与演变,就像一场赛跑。
代码示例:
# 加载股票价格数据
df = pd.read_csv('https://raw.githubusercontent.com/d3blocks/d3blocks/master/d3blocks/data/stocks.csv')
# 创建动态气泡图
# datetime, stock, value 是必需的列
d3.movingbubbles(df, datetime='datetime', stock='stock', value='value')

当数据具有父子关系或嵌套结构时,层次结构图是最佳选择。
treemap:高效的树状图树状图(Treemap)通过嵌套的矩形来表示层次结构,每个矩形的面积代表其数值大小,非常适合展示复杂的目录结构或预算分配。
代码示例:
# 加载泰坦尼克号幸存者数据
df = pd.read_csv('https://raw.githubusercontent.com/d3blocks/d3blocks/master/d3blocks/data/titanic.csv')
# 创建树状图
# labels: ['sex', 'class', 'age']
d3.treemap(df, labels=['sex', 'class', 'age'])

tree:经典的树形图经典的树形图(Tree Diagram)以父子节点连接的方式清晰地展示了数据的层级关系。
代码示例:
# 使用泰坦尼克号数据
d3.tree(df, labels=['sex', 'class', 'age'])

d3blocks 也支持多种经典的统计图表。
scatter:交互式散点图散点图(Scatter Plot)用于展示两个变量之间的关系。d3blocks 的散点图是可交互的,可以缩放和平移来探索数据密集区域。
代码示例:
# 加载企鹅数据集
df = pd.read_csv('https://raw.githubusercontent.com/d3blocks/d3blocks/master/d3blocks/data/penguins.csv')
# 创建散点图
d3.scatter(df['bill_length_mm'], df['flipper_length_mm'], color=df['species'])

heatmap:热力图热力图(Heatmap)通过颜色深浅来表示数值大小,非常适合用于展示相关性矩阵或任何二维数据。
代码示例:
# 使用企鹅数据
d3.heatmap(df)

d3blocks 允许进行丰富的自定义设置。几乎每个图表函数都支持以下参数:
filepath:指定输出 HTML 文件的路径和名称,例如 filepath='my_chart.html'。title:为图表添加标题。figsize:设置图表的尺寸,例如 figsize=[800, 600]。notebook:设置为 True 时,图表将直接在 Jupyter Notebook 中显示。示例:
# 自定义并保存 d3graph
d3.d3graph(
df,
filepath='energy_network.html',
title='Energy Flow Network',
figsize=[1000, 800]
)
搭建完美的写作环境:工具篇(12 章)