当前位置:首页>python>Python绘制像烟花一样的花瓣网络图(附数据和代码)

Python绘制像烟花一样的花瓣网络图(附数据和代码)

  • 2026-09-25 01:13:56
Python绘制像烟花一样的花瓣网络图(附数据和代码)

©[悠悠智汇笔记] 版权所有

🙏请尊重劳动成果,守护每一份劳动心血;⚖️未经授权,不得以为任何方式转载、摘编或抄袭。🔄转载合作请后台联系授权,侵权必究。

      友友们,除夕快乐呀,今天给大家们分享一个像烟花一样的花瓣网络图。在数据可视化领域,这种图表本质上是一种基于约束性力导向算法的环形维恩网络图。首先通过极坐标变换,将核心样本节点像烟花筒一样均匀地“钉”在圆周的各个方位,随后引入物理学中的引力与斥力模型,让成百上千个元素节点根据它们与样本的隶属关系,在画布上自然“绽放”。
      这种布局不仅仅是为了好看,当你面临超过 5 个样本的交集分析时,传统的维恩图会因为圆圈重叠过多而变得像一团乱麻,而这种花瓣网络图却能将那些只属于特定样本的元素会像火星一样飞向外围,而多组共有的核心元素则会被多方引力牵引至圆心深处。

01

全局配置

导入处理网络拓扑(NetworkX)、科学计算(NumPy)和数据处理(Pandas)的核心库,并初始化绘图系统的视觉参数。

import matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport networkx as nxfrom matplotlib.patches import Patch# 设置全局字体和基础样式plt.rcParams['font.family'] = 'Times New Roman'

02

颜色配置

定义不同样本(Source)对应的颜色映射。

# 样本配色字典:用于边颜色custom_color_map = {    "SampleA": "#b0d1a6", "SampleB": "#f5c5a0",    "SampleC": "#e7a39a", "SampleD": "#b1a5c9", "SampleE": "#a0d8ef"}# 标签配色字典:用于节点文字颜色sample_label_color_map = {    "SampleA": "#4f7942", "SampleB": "#c65f0a",    "SampleC": "#a03530", "SampleD": "#5e4c8c", "SampleE": "#20648a"}

03

环形几何布局计算

利用极坐标系理论,将中心节点(样本)均匀映射到圆周上。

def generate_circular_pos(nodes, radius=0.5):    pos = {}    n_nodes = len(nodes)    for i, node in enumerate(nodes):        theta = 2.0 * np.pi * i / n_nodes        pos[node] = np.array([radius * np.cos(theta), radius * np.sin(theta)])    return pos

04

构建NetworkX图拓扑

确定“样本-元素”之间的逻辑连接,并将颜色属性注入到每一根边(Edge)中。

def create_graph_model(df):    # 构建无向图模型    G = nx.from_pandas_edgelist(        df, source='source', target='target',         edge_attr=['color'], create_using=nx.Graph()    )    return G

05

可视化

将计算好的坐标和拓扑结构进行渲染。在调用力导向布局(Spring Layout)时,引入初始坐标作为种子,并配置线条的弯曲弧度、节点大小以及图例信息。

def main(file_path):    # 1. 加载数据    try:        df = pd.read_csv(file_path)    except:        return print("Error: File not found.")    # 2. 建立图模型与初始位置    G = create_graph_model(df)    source_nodes = df['source'].unique()    initial_pos = generate_circular_pos(source_nodes)    # 3. 布局优化     pos = nx.spring_layout(G, pos=initial_pos, k=0.1, iterations=100)    # 4. 执行绘图    fig, ax = plt.subplots(figsize=(8, 8))    # 提取边颜色并绘制弧线    edge_colors = [d.get('color', 'gray') for _, _, d in G.edges(data=True)]    nx.draw_networkx_edges(G, pos, edge_color=edge_colors, alpha=0.5,                            connectionstyle="arc3,rad=0.3", ax=ax)    # 绘制基础节点    nx.draw_networkx_nodes(G, pos, node_size=30, node_color='lightgray', ax=ax)    # 绘制标签     nx.draw_networkx_labels(G, pos, font_size=8, ax=ax)    # 5. 图例美化    legend_elements = [Patch(facecolor=c, label=l) for l, c in custom_color_map.items()]    ax.legend(handles=legend_elements, loc='best', frameon=False)    ax.set_axis_off()    plt.show()

🌿 今日的分享就到这里啦~如果这些内容有为你带来帮助,欢迎轻点右下角的【👍赞】和【👀在看】,也欢迎分享给更多需要的人,感恩~

THE

END

数据和代码怎么获取?

点击关注后,后台回复关键词:

2026_map_010可直接获取完整的示例数据和代码

如有帮助,您的点赞、评论、转发是我持续创作的动力~

猜您喜欢
往期精选▼

1. Python绘制多分组云雨图(附数据和代码)

2. Python绘制主成分分析图(附数据和代码)

3. Python绘制顶刊同款散点拟合回归组合图(附数据和代码)

4. Python绘制绝美分组环形柱状图(附数据和代码)

5. Python绘制Nature同款绝美雷达图(附数据和代码)

#数据可视化#科研绘图 #网论图 #Python #Matplotlib #Networkx

最新文章

随机文章