第二十八章:Python可视化图表扩展-和弦图、旭日图、六边形箱图、桑基图和主题流图

一、引言

在数据可视化领域,除了常见的折线图、柱状图和散点图,还有一些高级图表类型可以帮助我们更直观地展示复杂数据关系。本文将介绍五种扩展图表:和弦图、旭日图、六边形箱图、桑基图和主题流图。这些图表在展示数据关系、层次结构和流量分布方面具有独特的优势。资源绑定附上完整资料供读者参考学习!

二、和弦图

2.1 什么是和弦图?

和弦图(Chord Diagram)是一种用于展示矩阵数据的可视化工具,通常用于展示不同节点之间的关系强度。它通过弧线连接节点,弧线的宽度表示关系的强度。

2.2 示例代码

python 复制代码
import plotly.graph_objects as go

# 创建数据
nodes = ['A', 'B', 'C', 'D', 'E']
matrix = [[0, 10, 5, 3, 2],
          [10, 0, 8, 4, 1],
          [5, 8, 0, 6, 7],
          [3, 4, 6, 0, 9],
          [2, 1, 7, 9, 0]]

# 创建和弦图
fig = go.Figure(data=go.Sankey(
    node=dict(
        pad=15,
        thickness=20,
        line=dict(color="black", width=0.5),
        label=nodes,
        color="blue"
    ),
    link=dict(
        source=[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4],
        target=[1, 2, 3, 4, 0, 2, 3, 4, 0, 1, 3, 4, 0, 1, 2, 4, 0, 1, 2, 3],
        value=[10, 5, 3, 2, 10, 8, 4, 1, 5, 8, 6, 7, 3, 4, 6, 9, 2, 1, 7, 9]
    )
))

# 显示图表
fig.show()

2.3 说明

  • 节点和矩阵 :节点是图中的实体,矩阵表示节点之间的关系强度。

  • 颜色映射 :使用cmap和edge_cmap设置颜色映射。

三、旭日图

3.1 什么是旭日图?

旭日图(Sunburst Chart)是一种层次结构可视化工具,用于展示层次数据。它通过环形扇区展示数据的层次关系,每个扇区的大小表示数据的值。

3.2 示例代码

复制代码
import matplotlib.pyplot as plt
import numpy as np
import plotly.express as px

# 创建数据
data = dict(
    character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"],
    value=[10, 14, 12, 10, 2, 6, 6, 4, 4]
)

# 创建旭日图
fig = px.sunburst(
    data,
    names='character',
    parents='parent',
    values='value',
    title='旭日图示例'
)

# 显示图表
fig.show()

3.3 说明

  • 层次数据 :通过names和parents参数定义层次关系。

  • 值 :通过values参数设置每个节点的大小。

四、六边形箱图

4.1 什么是六边形箱图?

六边形箱图(Hexbin Plot)是一种用于展示二维数据密度的图表。它将数据点划分到六边形网格中,并通过颜色深浅表示密度。

4.2 示例代码

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建数据
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)

# 创建六边形箱图
plt.figure(figsize=(10, 8))
plt.hexbin(x, y, gridsize=30, cmap="mako")
plt.title('六边形箱图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.colorbar(label='密度')
plt.show()

4.3 说明

  • 数据分布 :使用histplot函数创建六边形箱图。

  • 颜色映射 :通过cmap参数设置颜色映射。

五、桑基图

5.1 什么是桑基图?

桑基图(Sankey Diagram)是一种用于展示流量或转移的图表。它通过带状连接展示不同节点之间的流量大小。

5.2 示例代码

python 复制代码
import plotly.graph_objects as go
labels = ["Coal", "Solar", "Wind", "Nuclear", "Residential", "Industrial", "Commercial"]
source = [0, 1, 2, 3, 0, 1, 2, 3]
target = [4, 4, 4, 4, 5, 5, 5, 5]
value = [25, 10, 40, 20, 30, 15, 25, 35]
#Create the Sankey diagram object
fig = go.Figure(data=[go.Sankey(
    node=dict(
        pad=15,
        thickness=20,
        line=dict(color="black", width=0.5),
        label=labels
    ),
    link=dict(
        source=source,
        target=target,
        value=value
    ))])
fig.update_layout(title_text="Energy Flow in Model City", font_size=12)
fig.show()

5.3 说明

  • 节点和边 :通过source和target定义节点,value表示流量大小。

  • 颜色映射 :使用cmap设置颜色映射。

六、主题流图

6.1 什么是主题流图?

主题流图(Theme River)是一种用于展示时间序列数据的图表,通常用于展示多个主题随时间的变化趋势。

6.2 示例代码

python 复制代码
import altair as alt
from vega_datasets import data

source = data.unemployment_across_industries.url

chart = alt.Chart(source).mark_area().encode(
    alt.X('yearmonth(date):T',
          axis=alt.Axis(format='%Y', domain=False, tickSize=0)
          ),
    alt.Y('sum(count):Q', stack='center', axis=None),
    alt.Color('series:N',
              scale=alt.Scale(scheme='category20b')
              )
).interactive()

# 保存为HTML文件
chart.save('unemployment_chart.html')

6.3 说明

  • 时间序列 :通过stackplot函数创建主题流图。

  • 堆叠区域:每个主题的区域堆叠在一起,展示随时间的变化趋势。

七、总结

本文介绍了五种扩展可视化图表:和弦图、旭日图、六边形箱图、桑基图和主题流图。这些图表在展示复杂数据关系、层次结构和流量分布方面具有独特的优势。希望这些示例能够激发您的灵感,帮助您在实际项目中选择合适的图表类型。资源绑定附上完整资料供读者参考学习!

如果您有任何问题或建议,请随时在评论区留言!

相关推荐
dialect_5 小时前
KMP算法
开发语言·c++·算法
总要学点什么6 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
前端精髓6 小时前
结构化输出with_structured_output(抽卡)
python·langchain
尹人入圣7 小时前
目前热门的IP驱动产业新场景新工具
网络·python·网络协议·tcp/ip
开开心心_Every7 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c7 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
Nuanyt8 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
吴卫斌8 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
2601_967987378 小时前
Python——入门级(定义功能def函数)
python·函数·可变参数·默认参数·关键字参数
超级架构师9 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core