Python绘图库及图像类型之高级可视化

Python绘图库及图像类型之基础图表-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/148433762?spm=1001.2014.3001.5501

热力图(heatmap)

绘图库介绍

用 Python 绘制热力图(Heatmap)详解:从数据到可视化全流程(第三天)_python heatmap-CSDN博客https://blog.csdn.net/2401_84301183/article/details/146536553

类别 具体作用/场景 说明/示例
核心作用 直观展示数据密度/强度分布 用颜色深浅(暖色表高值,冷色表低值)快速揭示数据集中高低值区域及分布模式。
揭示模式、趋势和异常 识别热点(高值聚集)、冷点(低值聚集)、梯度变化、异常值。
高效比较多变量/类别间关系 矩阵热力图中通过颜色比较行、列代表的类别/变量间关系强度(如相关性、频率)。
简化高维数据表达 将二维(如坐标+值)或三维(如行类+列类+值)数据压缩到平面视图,用颜色编码。
空间效率高 在有限空间内展示大量数据点或关系对比,优于重叠散点图或多条形图。
主要实现场景 地理空间数据分析 (Geospatial) 应用领域: 人口、犯罪、交通、房产、疾病、天气、商业选址等。
示例: 人口密度图、交通拥堵热图、疫情分布图、商场客流量热图。
网站和用户行为分析 (Web & UX) 应用领域: 网页/App设计优化、用户体验研究。
示例: 点击热图(分析按钮点击)、滚动热图(分析页面浏览深度)、鼠标移动热图(分析浏览路径)、眼动追踪热图(分析视觉焦点)。
数据分析和统计学 (Data Analysis & Statistics) 应用领域: 探索性数据分析、模型评估、关系挖掘。
示例: 相关性矩阵(展示变量间相关系数)、混淆矩阵(评估分类模型性能)、缺失值模式热图、聚类结果热图(展示基因表达模式等)。

函数签名(Function Signature)

# seaborn.heatmap 是 Python 可视化库 Seaborn 中用于绘制热力图的函数,通过颜色变化直观展示二维矩阵数据(如相关矩阵、混淆矩阵等)。
sns.heatmap(
    data,                   # 必需参数:二维数据(数组、DataFrame)
    vmin=None,              # 颜色映射最小值
    vmax=None,              # 颜色映射最大值
    cmap=None,              # 颜色方案(如 'viridis', 'coolwarm', 'RdBu_r')
    center=None,            # 颜色中心值(常用于有正负的数据)
    robust=False,           # 抗异常值缩放(使用分位数替代极值)
    annot=None,             # 是否在格子中显示数值(True/False 或 同shape数组)
    fmt='.2g',             # 数值格式(如 '.1f' 保留1位小数)
    annot_kws=None,         # 注释文本样式(字典,如 {'size':10})
    linewidths=0,           # 格子边框宽度
    linecolor='white',      # 边框颜色
    cbar=True,              # 是否显示颜色条
    cbar_kws=None,          # 颜色条设置(字典,如 {'label':'Score'})
    square=False,           # 是否强制为正方形
    xticklabels='auto',     # X轴标签(True/False/列表/'auto')
    yticklabels='auto',     # Y轴标签(同上)
    mask=None,              # 遮盖部分数据(True位置不显示)
    ax=None,                # 指定绘图的Axes对象
    **kwargs                # 其他matplotlib参数
)

核心参数详解表

参数 默认值 数据类型 说明
data - 2D array/DataFrame 必需参数,输入矩阵数据
vmin None float 颜色映射最小值
vmax None float 颜色映射最大值
cmap None str/Colormap 颜色映射方案(如 'viridis', 'coolwarm', 'RdBu_r')
center None float 颜色中心值(用于有正负值的数据)
annot None bool/array 是否在格子中显示数值(True 或同形数组)
fmt '.2g' str 数值格式(如 '.2f'=两位小数,'d'=整数)
linewidths 0 float 格子边框宽度(0=无边框)
linecolor 'white' str 边框颜色
cbar True bool 是否显示颜色条
cbar_kws None dict 颜色条参数(如 {'label': 'Score'})
square False bool 是否强制为正方形
xticklabels 'auto' bool/list/'auto' X轴标签控制(True=显示,False=隐藏)
yticklabels 'auto' bool/list/'auto' Y轴标签控制
mask None bool array 遮盖部分数据(True位置留白)
robust False bool 是否使用分位数抗异常值
annot_kws None dict 注释文本样式(如 {'size':10, 'color':'black'})
ax None matplotlib Axes 指定绘图的坐标轴

示例代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.colors import LinearSegmentedColormap

# 设置中文支持(如果需要)
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'Microsoft YaHei', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False


# 创建示例数据
def generate_sample_data():
    # 创建日期范围
    dates = pd.date_range(start='2023-01-01', end='2023-01-15')
    # 创建时间范围
    times = [f"{hour:02d}:00" for hour in range(8, 18)]

    # 创建随机数据
    np.random.seed(42)
    data = np.random.rand(len(dates), len(times)) * 100

    # 添加一些模式使数据更有趣
    for i in range(len(dates)):
        # 周末模式
        if dates[i].weekday() >= 5:  # 周六和周日
            data[i, :] *= 0.7  # 周末值较低
        # 中午高峰模式
        data[i, 4:7] *= 1.5  # 中午12点到下午2点

    # 创建DataFrame
    df = pd.DataFrame(data, index=dates.strftime('%Y-%m-%d'), columns=times)
    return df


# 创建自定义颜色映射
def create_custom_colormap():
    colors = ["#2a9d8f", "#e9c46a", "#f4a261", "#e76f51"]
    return LinearSegmentedColormap.from_list("custom_cmap", colors)


# 绘制热力图并添加注解
def plot_heatmap_with_annotations(df):
    # 创建图形
    plt.figure(figsize=(14, 10))

    # 创建自定义颜色映射
    custom_cmap = create_custom_colormap()

    # 绘制热力图
    ax = sns.heatmap(
        df,
        cmap=custom_cmap,
        annot=True,  # 显示数值注解
        fmt=".1f",  # 数值格式(保留一位小数)
        annot_kws={"size": 9, "color": "black"},  # 注解文本样式
        linewidths=0.5,  # 单元格之间的线条宽度
        linecolor="white",  # 线条颜色
        cbar_kws={"label": "活动强度", "shrink": 0.8}  # 颜色条设置
    )

    # 设置标题和标签
    plt.title("每日活动强度热力图 (2023年1月1日-15日)", fontsize=16, pad=20)
    plt.xlabel("时间", fontsize=12)
    plt.ylabel("日期", fontsize=12)

    # 旋转x轴标签
    plt.xticks(rotation=45, ha='right')

    # 添加网格线(在热力图后面)
    ax.set_facecolor('#f0f0f0')
    ax.grid(which='major', axis='both', linestyle='-', color='white', linewidth=0.5)

    # 调整布局
    plt.tight_layout()

    # 保存图表
    save_path = "heatmap_with_annotations.png"
    plt.savefig(save_path, dpi=300, bbox_inches='tight')

    # 显示图表
    plt.show()

    return save_path


# 主程序
if __name__ == "__main__":
    # 生成示例数据
    data_df = generate_sample_data()

    print("生成的热力图数据示例:")
    print(data_df.head())

    # 绘制并保存热力图
    saved_path = plot_heatmap_with_annotations(data_df)
    print(f"\n热力图已保存至: {saved_path}")

Python绘图库及图像类型之高级可视化_第1张图片

小提琴图(violinplot)

绘图库介绍

用python绘制小提琴图的基本流程及其操作_python 小提琴图-CSDN博客https://blog.csdn.net/weixin_70682362/article/details/148018533

作用类别 核心作用描述 典型实现场景 对比优势
分布形态可视化 直观展示连续数据的整体分布形状、概率密度(哪里密集、哪里稀疏) 1. 观察单个变量的数据分布特征(单峰、双峰、多峰、对称、偏态)。
2. 数据探索阶段了解数据的基本形态。
优于箱线图:清晰揭示分布形状(如多峰性、不对称性),箱线图仅显示摘要统计。
集中趋势比较 显示数据分布的中心位置(通常结合箱线图元素显示中位数/四分位数) 1. 比较不同类别/分组数据的中心趋势(如中位数)差异。
2. 观察不同实验条件下结果的中心位置变化。
结合密度与统计量:既看密度集中区域,也看具体中位数位置。
离散程度比较 通过“小提琴”的宽度变化展示数据分布的离散程度(宽=分散,窄=集中) 1. 比较不同类别/分组数据的变异性或一致性(如评估不同生产工艺的稳定性)。
2. 识别方差差异显著的组别。
优于箱线图:宽度变化直观体现数据点在整个值域上的疏密程度,而不仅是IQR。
分布对称性/偏度分析 通过形状的对称性判断数据分布是左偏(负偏)、右偏(正偏)还是对称 1. 分析数据是否符合对称分布假设(如某些统计检验前提)。
2. 识别收入、响应时间等常见偏态数据的偏斜方向。
优于直方图/密度图:在多组比较时,并排小提琴图更易对比不同组的偏斜情况。
多组分布对比 将多个组/类别的分布并排或叠加显示,便于直接比较其形态、中心和离散度差异 1. 比较不同产品/型号的性能指标分布。
2. 分析不同营销策略下客户购买金额的分布差异。
3. 评估不同治疗方法下患者康复时间的分布。
4. 对比不同地区的气温分布模式。
5. 分析不同用户群(如新/老用户)使用时长/消费频率的分布。
核心优势最擅长同时比较多个组的完整分布特征,信息量远大于仅比较均值或中位数。
异常值检测 (辅助) 结合箱线图元素(通常内嵌),可识别潜在的异常值点 1. 在观察整体分布的同时,辅助查看是否存在显著偏离主体的极端值。 结合优势:密度形态提供上下文,箱线图元素标记异常点。
数据清洗/验证 揭示数据分布中意想不到的模式或问题(如双峰可能暗示数据混合了不同群体) 1. 数据质量检查:发现分布异常(如预期单峰却出现双峰,可能需检查数据来源或分组)。
2. 识别数据子群或潜在分段。
揭示隐藏信息:能提示数据背后可能存在的未考虑因素或分组。

函数签名(Function Signature)

# seaborn.violinplot() 是用于绘制小提琴图的函数,它结合了箱线图和核密度估计(KDE)的特点,能直观展示数据的分布、概率密度及关键统计量。
seaborn.violinplot(
    x=None, y=None, hue=None, data=None, 
    order=None, hue_order=None, 
    bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100,
    width=0.8, inner='box', split=False, dodge=True, orient=None,
    linewidth=None, color=None, palette=None, saturation=0.75,
    ax=None, **kwargs
)

核心参数详解表

参数 类型 默认值 说明
x 字符串/数组 None X轴变量(分类数据)
y 字符串/数组 None Y轴变量(数值数据)
hue 字符串 None 分组变量(次级分类维度)
data DataFrame None 数据源(需配合x/y/hue使用)
order 列表 None 指定x变量顺序(如['Mon','Tue','Wed'])
hue_order 列表 None 指定hue分组顺序(如['Male','Female'])
bw 字符串/浮点数 'scott' 核密度估计带宽:
'scott'/'silverman'(自动计算)
数值(值越小越贴合数据)
scale 字符串 'area' 小提琴宽度缩放方式:
'area'(面积相同)
'count'(宽度与样本量成正比)
'width'(最大宽度相同)
inner 字符串 'box' 内部显示元素:
'box'(微型箱线图)
'quartiles'(四分位线)
'point'/'stick'(点/线)
None(不显示)
split 布尔值 False 当使用hue时:
True(左右对称合并)
False(独立显示)
dodge 布尔值 True 当使用hue时:
True(并排显示)
False(重叠显示)
orient 字符串 None 方向:
'v'(垂直)
'h'(水平)
None(自动推断)
palette 字符串/列表 None 配色方案(如'viridis'/'Set2'
color 颜色值 None 统一设置所有小提琴颜色
width 浮点数 0.8 小提琴最大宽度(0~1)
linewidth 浮点数 1 轮廓线宽度(像素)
cut 浮点数 2 数据范围外的延伸倍数(0=不延伸)
gridsize 整数 100 密度曲线平滑度(值越大越平滑)

示例代码

pip install seaborn matplotlib numpy
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体支持(如果需要显示中文)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号

# 创建示例数据(替代seaborn内置数据集)
np.random.seed(42)
data = {
    'Day': np.repeat(['Mon', 'Tue', 'Wed', 'Thu'], 100),
    'Sales': np.hstack([  # 修改为np.hstack
        np.random.normal(120, 20, 100),
        np.random.normal(80, 15, 100),
        np.random.normal(150, 30, 100),
        np.random.normal(95, 25, 100)
    ])
}

# 创建图形
plt.figure(figsize=(10, 6))
ax = sns.violinplot(
    x='Day',
    y='Sales',
    data=data,
    hue='Day',  # 新增hue参数
    inner='quartile',
    palette='Pastel1',
    legend=False  # 隐藏图例
)

# 添加标题和标签
plt.title('每日销售额分布', fontsize=14)
plt.xlabel('星期', fontsize=12)
plt.ylabel('销售额 (万元)', fontsize=12)

# 计算并添加中位数注释
medians = [np.median(data['Sales'][data['Day'] == day]) for day in ['Mon', 'Tue', 'Wed', 'Thu']]
vertical_offset = np.mean(medians) * 0.05  # 偏移量

for i, median in enumerate(medians):
    ax.text(
        x=i,
        y=median + vertical_offset,
        s=f'中位: {median:.1f}',
        ha='center',  # 水平居中
        va='bottom',  # 垂直底部对齐
        fontsize=10,
        color='black',
        weight='bold'
    )

# 添加特殊注释
ax.annotate('最高销售额区间',
            xy=(2, 200),
            xytext=(2.5, 220),
            arrowprops=dict(arrowstyle='->', color='red', linewidth=1.5),
            fontsize=12,
            color='darkred',
            bbox=dict(boxstyle="round,pad=0.3", fc="white", ec="gray", lw=1))

# 添加网格线
plt.grid(axis='y', linestyle='--', alpha=0.7)

# 保存高清图像(支持多种格式:png, jpg, svg, pdf)
plt.savefig('violin_plot.png',
           dpi=300,           # 高分辨率
           bbox_inches='tight',  # 紧凑布局
           facecolor='white')    # 背景色

# 显示图像(可选)
plt.tight_layout()
plt.show()

print("图像已保存为 violin_plot.png")

Python绘图库及图像类型之高级可视化_第2张图片

3D曲面图(plot_surface)

绘图库介绍

Python绘制3D曲面图-CSDN博客https://blog.csdn.net/weixin_41923961/article/details/83998917

维度 描述 典型实现场景
核心作用 可视化三维空间中的连续表面 理解复杂数学函数、物理现象的空间分布。
揭示变量间的非线性关系 分析两个自变量(X, Y)对因变量(Z)的共同影响(尤其非线性关系)。
展示空间数据的分布、趋势和模式 地理高程、物理场(温度/压力/电势)、浓度分布的空间变化。
识别关键特征点(峰值、谷值、鞍点) 定位最大值、最小值、转折点或急剧变化区域。
实现场景 数学与函数可视化 绘制二元函数图像(如 Z = sin(X²+Y²)),分析函数形状。
地理信息系统 地形图、数字高程模型、坡度分析、洪水模拟。
物理学与工程学 • 电磁场:电势/磁场分布
• 力学:应力分布、振动模态
• 流体力学:流速/压力场
• 热力学:温度场分布
化学与材料科学 • 分子建模:电子云密度、势能面
• 材料表征:表面粗糙度、成分浓度分布
气象与海洋学 • 气象:大气压力/温度场
• 海洋:海水温度/盐度垂直剖面
医学与生物科学 • 医学:器官3D重建(CT/MRI)
• 生物学:蛋白质结构表面、药物扩散模拟
计算机图形学 渲染复杂3D模型表面(如游戏场景、角色)
数据分析 • 优化算法:损失函数曲面
• 响应面分析:多变量对输出的影响

函数签名(Function Signature)

# ax.plot_surface() 是 Matplotlib 中用于绘制 3D 曲面的核心函数(位于 mpl_toolkits.mplot3d 模块)。
ax.plot_surface(X, Y, Z, 
                cmap=None,           # 颜色映射
                rstride=1,           # 行方向步长
                cstride=1,           # 列方向步长
                color=None,          # 固定颜色
                edgecolor=None,      # 网格线颜色
                alpha=1.0,           # 透明度
                shade=True,          # 是否启用阴影
                antialiased=True,    # 抗锯齿
                norm=None,            # 数据归一化
                vmin=None, vmax=None # 颜色映射范围
                **kwargs)

核心参数详解表

参数 说明
X, Y, Z 必需,均为 2D 数组(形状相同)。通常用 numpy.meshgrid() 生成
cmap 颜色映射(如 'viridis''plasma''coolwarm'),需配合 facecolors 或 Z 值使用
rstridecstride 网格采样步长(减少可提升性能)。例如 rstride=5 表示每隔5行绘制
color 固定曲面颜色(字符串或 RGB 元组),与 cmap 互斥
edgecolor 网格线颜色(默认 'k' 黑色),设为 'none' 可隐藏网格
alpha 透明度(0.0 透明 ~ 1.0 不透明)
shade 是否用光照效果增强立体感(默认为 True
antialiased 是否启用抗锯齿(默认为 True
vminvmax 颜色映射的数据范围(配合 cmap 使用)

示例代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))  # 生成曲面数据 (二维sinc函数)

# 创建图形和3D坐标轴
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, projection='3d')

# 绘制曲面图
surf = ax.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8,
                       rstride=2, cstride=2, antialiased=True)

# 添加颜色条
fig.colorbar(surf, shrink=0.5, aspect=10, label='Z Value')

# 添加全局标题
plt.suptitle('3D Surface Plot with Annotations', fontsize=16)

# 添加轴标签
ax.set_xlabel('X Axis', fontsize=12, labelpad=15)
ax.set_ylabel('Y Axis', fontsize=12, labelpad=15)
ax.set_zlabel('Z Axis', fontsize=12, labelpad=15)

# 添加点注解
point = (0, 0, 1)  # 要注解的点 (x, y, z)
ax.scatter(*point, color='red', s=100, label='Global Max')
ax.text(point[0], point[1], point[2] + 0.2,
        'Global Maximum',
        color='red',
        fontsize=12,
        ha='center')

# 添加指向局部最小值的箭头注解
min_point = (-3.5, 3.5, Z[35, 35])
ax.scatter(*min_point, color='blue', s=80)
ax.annotate('Local Minimum',
            xy=(min_point[0], min_point[1]),  # 目标点
            xytext=(-50, 30),                 # 文本位置偏移
            textcoords='offset points',
            arrowprops=dict(arrowstyle='->', lw=1.5, color='blue'),
            fontsize=10,
            color='blue')

# 添加图例
ax.legend(loc='upper right', fontsize=10)

# 调整视角
ax.view_init(elev=25, azim=-45)  # 仰角25度,方位角-45度

# 添加图形框注释
fig.text(0.05, 0.02,
         'Generated by Matplotlib | Function: sin(sqrt(x² + y²))',
         fontsize=9, 
         color='gray')

# 保存高分辨率图片
plt.savefig('3d_surface_plot.png', dpi=300, bbox_inches='tight')

# 显示图形
plt.tight_layout()
plt.show()

地理地图(figure)

绘图库介绍

Python绘制地图神器folium介绍及安装使用教程-CSDN博客https://blog.csdn.net/python2021_/article/details/123652555

作用类别 具体作用描述 典型实现场景举例 核心价值
空间认知与定位 提供地球表面或特定区域的空间位置、形状、大小、方向等基础地理信息。 日常生活导航: 手机地图APP(如百度、高德、Google Maps)查找地点、规划路线。
位置查询: 查找酒店、餐厅、景点、加油站等POI(兴趣点)的位置。
区域概览: 查看国家、省、市、县、乡镇的行政边界和范围。
建立空间框架,理解“在哪里”。
空间关系展示 可视化地展示地理要素(点、线、面)之间的空间关系(邻近、包含、相交、叠加等)。 城市规划: 展示道路网、建筑地块、绿地、水系的空间布局关系。
设施选址: 分析候选位置与现有设施(如学校、医院、竞争对手)、人口分布、交通可达性的关系。
环境监测: 显示污染源、监测点、敏感区域(如水源地)的空间分布与距离关系。
揭示地理要素间的相互联系和格局。
空间分布可视化 将具有空间位置的数据(人口、经济、环境、事件等)以图形方式直观呈现其分布特征。 人口密度图: 展示不同区域的人口集中程度。
疾病分布图: 追踪流行病或地方病的空间传播。
经济活动图: 显示GDP、产业分布、消费水平的地域差异。
犯罪热点图: 识别案件高发区域。
气象云图: 展示温度、降水、气压等的空间分布。
直观揭示数据的空间模式、聚集性、热点/冷点区域和地域差异。
导航与路径规划 提供从一个地点到另一个地点的最佳或可行路径指导。 驾车导航: 实时规划避开拥堵、收费少、时间短的驾驶路线。
公共交通导航: 规划包含公交、地铁、步行等多种方式的换乘方案。
步行/骑行导航: 提供适合行人和骑手的路径。
物流配送: 优化快递、外卖的配送路线和顺序。
提供高效的移动解决方案,节省时间和成本。
空间分析与决策 基于地图进行复杂的空间运算和建模,提取信息、发现规律、预测趋势、支持决策。 选址分析: 综合交通、人口、竞争、成本等因素确定最优开店/建厂位置。
视域分析: 规划监控摄像头覆盖范围或景区观景点视野范围。
缓冲区分析: 确定污染源影响范围、划定保护区边界。
叠加分析: 将不同图层(如土壤类型、坡度、土地利用)叠加,评估土地适宜性(如农业、建设)。
网络分析: 计算服务覆盖范围(如消防站、急救中心)、寻找最近设施。
将空间数据转化为洞察力,为科学决策提供定量依据。
资源管理与规划 用于监测、评估、规划和可持续管理自然资源和人文资源。 土地资源管理: 土地调查、地籍管理、土地利用规划与变更监测。
森林资源管理: 森林覆盖监测、火灾预警、采伐规划。
水资源管理: 流域规划、水质监测、洪水淹没模拟与风险评估。
城市规划: 城市扩张模拟、基础设施规划(道路、管线)、公共服务设施布局优化。
农业精准管理: 农田地块划分、作物长势监测、变量施肥/灌溉指导。
优化资源配置,提高管理效率,促进可持续发展。
灾害监测与应急响应 用于灾害风险评估、实时监测、预警发布、灾情评估和应急资源调度。 风险评估: 绘制地震带、洪水淹没区、滑坡隐患点地图。
实时监测: 利用卫星/无人机影像监测火灾、洪涝、台风路径。
灾情评估: 快速获取受灾范围、损毁程度。
应急指挥: 定位受灾点、规划救援路线、调度救援力量和物资。
提升灾害预警能力,加速应急响应,减少生命财产损失。
历史变迁与趋势研究 通过不同时期地图的对比,展示地理环境、城市形态、土地利用等的历史变化和发展趋势。 城市历史地图: 展示城市扩张、街区演变。
海岸线变化图: 监测侵蚀或淤积。
土地利用变化图: 分析耕地、林地、建设用地的转化。
气候变化研究: 可视化冰川退缩、海平面上升等长期变化。
理解过去,洞察变化规律,预测未来发展趋势。
教育与科普 作为教学和科普的重要工具,直观展示地理知识、国家疆域、自然人文现象。 课堂教学: 地理、历史、环境科学等课程的教学辅助。
博物馆/科技馆: 互动地图展示地理、历史、科技知识。
旅游宣传: 景区手绘地图、电子导览图。
国家版图意识教育: 准确展示国家领土和边界。
形象直观,激发兴趣,传播知识,增强空间认知和爱国意识。
军事与国防 提供战场环境信息、部署态势、行动规划和作战指挥支持(保密性强)。 地形分析: 研究战场地形、地貌、交通条件。
态势标绘: 显示敌我双方部署和行动。
精确制导: 为武器系统提供精确地理坐标。
军事演习规划: 模拟推演和行动计划制定。
提供关键战场空间信息,支持战略战术决策(高度专业化应用)。

函数签名(Function Signature)

# plt.figure() 是 Matplotlib 中用于创建或激活图形窗口的核心函数。
plt.figure(
    num=None,          # 图形标识符
    figsize=None,      # 图形尺寸(宽, 高)
    dpi=None,          # 分辨率(每英寸点数)
    facecolor=None,    # 背景色
    edgecolor=None,    # 边框颜色
    frameon=True,      # 是否显示边框
    FigureClass=Figure, # 图形类
    clear=False,       # 是否清除已有图形
    **kwargs
)
# ax.add_feature() 是 Python 地理绘图库 Cartopy 中的一个核心函数,用于向地图坐标轴(GeoAxes 对象)添加地理特征(如海岸线、国界、河流等)。
ax.add_feature(feature, **kwargs)

核心参数详解表 

plt.figure

参数 数据类型 默认值 说明 常用值示例
num int / str None 图形标识符
• 整数:图形编号
• 字符串:图形名称
• None:自动编号
12"Results"
figsize (float, float) (6.4, 4.8) 图形尺寸
(宽度, 高度) 单位:英寸
(8, 4)(10, 5)(12, 6)
dpi int 100 分辨率
每英寸点数(Dots Per Inch)
80100150200
facecolor str / color 'white' 图形背景颜色 'white''#f0f0f0''lightblue'
edgecolor str / color 'black' 图形边框颜色 'black''gray''blue'
frameon bool True 是否显示图形边框 True (显示), False (隐藏)
clear bool False 是否清除现有图形内容
(当图形已存在时)
False (保留内容), True (清空图形)
add_feature
import cartopy.feature as cfeature

ax.add_feature(cfeature.COASTLINE)          # 海岸线
ax.add_feature(cfeature.BORDERS)            # 国界
ax.add_feature(cfeature.LAKES)              # 湖泊
ax.add_feature(cfeature.RIVERS)             # 河流
ax.add_feature(cfeature.LAND)               # 陆地填充
ax.add_feature(cfeature.OCEAN)              # 海洋填充
参数 作用 示例值
edgecolor 边界颜色 'black''#FF0000'
facecolor 填充颜色 'lightblue'
linewidth 线宽 1.5
linestyle 线型 '--'':'
alpha 透明度(0-1) 0.6
zorder 图层叠放顺序 2(数值越大越靠上)

示例代码

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 创建地图
fig = plt.figure(figsize=(12, 12))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

# 添加地理特征
ax.add_feature(cfeature.OCEAN, facecolor='#E6F3FF')  # 海洋颜色
ax.add_feature(cfeature.LAND, facecolor='#FFF2CC')  # 陆地颜色
ax.add_feature(cfeature.COASTLINE, linewidth=0.8)  # 海岸线
ax.add_feature(cfeature.BORDERS, linestyle=':', linewidth=0.8)  # 国界线

# 设置中国区域范围
ax.set_extent([73, 135, 15, 55], crs=ccrs.PlateCarree())

# 定义主要城市
cities = {
    '北京': (116.4, 40.2),
    '上海': (121.47, 31.23),
    '广州': (113.26, 23.12),
    '深圳': (114.06, 22.55),
    '重庆': (106.54, 29.59),
    '成都': (104.06, 30.67),
    '武汉': (114.30, 30.60),
    '西安': (108.93, 34.27),
    '乌鲁木齐': (87.62, 43.82),
    '拉萨': (91.11, 29.65),
    '哈尔滨': (126.63, 45.75),
    '台北': (121.56, 25.03)
}

# 添加城市标记和标注
for city, (lon, lat) in cities.items():
    # 绘制标记点
    ax.plot(lon, lat, 'ro', markersize=8, transform=ccrs.PlateCarree(), alpha=0.7)

    # 设置偏移量
    offset_x, offset_y = 1.5, 1

    # 特殊位置调整
    if city == '重庆':
        offset_x, offset_y = -3, -1
    elif city == '拉萨':
        offset_x, offset_y = -3, -0.5
    elif city == '乌鲁木齐':
        offset_x, offset_y = -4, 0
    elif city == '哈尔滨':
        offset_x, offset_y = -1, 1
    elif city == '台北':
        offset_x, offset_y = 0, -2

    # 添加文字标注
    ax.text(
        lon + offset_x,
        lat + offset_y,
        city,
        fontsize=12,
        fontweight='bold',
        color='darkred',
        transform=ccrs.PlateCarree(),
        bbox=dict(facecolor='white', alpha=0.8, boxstyle='round,pad=0.3', edgecolor='gray')
    )

# 添加特殊标注(带箭头)
ax.annotate(
    '首都北京',
    xy=(116.4, 40.2),
    xytext=(100, 45),
    arrowprops=dict(
        arrowstyle="fancy",
        color='#CC0000',
        connectionstyle="arc3,rad=0.3",
        linewidth=2
    ),
    fontsize=14,
    fontweight='bold',
    color='#CC0000',
    transform=ccrs.PlateCarree()
)

# 添加地图元素
# ax.set_title('中国主要城市分布图', fontsize=20, pad=35, y=1.05)

# 添加网格
ax.gridlines(draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--')

# 添加比例尺
scale_bar_length = 10  # 10度经度
ax.plot([100, 100 + scale_bar_length], [18, 18], 'k-', linewidth=2, transform=ccrs.PlateCarree())
ax.text(100 + scale_bar_length / 2, 17, f'{scale_bar_length}°',
        horizontalalignment='center', fontsize=10, transform=ccrs.PlateCarree())

# 添加指北针
ax.text(134, 52, 'N', fontsize=15, fontweight='bold',
        horizontalalignment='center', transform=ccrs.PlateCarree())
ax.plot([134, 134], [50, 54], 'k-', linewidth=1.5, transform=ccrs.PlateCarree())
ax.plot([134, 133], [53, 52], 'k-', linewidth=1.5, transform=ccrs.PlateCarree())
ax.plot([134, 135], [53, 52], 'k-', linewidth=1.5, transform=ccrs.PlateCarree())

# 添加图例说明
ax.text(0.01, 0.01, '数据来源: Natural Earth & Cartopy',
        transform=ax.transAxes, fontsize=10, color='gray')

# 添加九段线(南海诸岛)
nine_dash_line = [
    (108, 5), (112, 7), (116, 9), (120, 11), (124, 13),
    (118, 15), (114, 13), (110, 11), (106, 9), (108, 5)
]
lons, lats = zip(*nine_dash_line)
ax.plot(lons, lats, 'k--', transform=ccrs.PlateCarree(), linewidth=1.5)

plt.subplots_adjust(top=0.92)  # 为标题留出空间

# 保存和显示
plt.tight_layout()
plt.savefig('china_cities_map_cartopy.png', dpi=300, bbox_inches='tight')
plt.show()

Python绘图库及图像类型之高级可视化_第3张图片

交互式图表(Plotly.graph_objects)

《Python实战进阶》No16: Plotly 交互式图表制作指南-CSDN博客https://blog.csdn.net/yweng18/article/details/146125263

作用类别 具体作用描述 带来的价值
深入数据探索 允许用户缩放、平移、聚焦特定数据范围或区域。 揭示宏观趋势下的微观细节,避免信息过载。
支持数据点的悬停查看详细信息(Tooltips)。 无需离开图表即可获取精确数值、标签等关键信息。
动态数据筛选 提供下拉菜单、滑块、复选框、时间轴等控件进行维度、度量或时间范围的筛选。 用户可快速聚焦于感兴趣的数据子集,进行对比分析或排除干扰因素。
多维数据钻取 点击图表元素(如柱形图中的柱子、地图中的区域)钻取到更细粒度的数据层次。 实现从汇总数据到明细数据的无缝切换,理解数据构成的来源。
数据关联联动 一个图表中的交互操作(如选择、筛选)自动更新页面上的其他关联图表或数据表格。 展示数据不同侧面之间的关联性,提供全局视角,避免信息孤岛。
即时计算反馈 用户选择数据后,图表能动态展示基于选择的相关计算(如占比、平均值、差值等)。 快速获得衍生指标和洞察,无需手动计算或切换视图。
提升参与理解 用户不再是数据的被动接受者,而是主动参与者。 增强用户对数据的兴趣、记忆和理解深度,提升分析报告的吸引力和说服力。
灵活适配需求 用户可以根据自己的分析路径和疑问定制视图。 满足不同背景、不同目标用户的个性化分析需求,提高工具的普适性和用户满意度。
应用领域 典型场景 常用交互功能示例
商业智能(BI)与报表 销售仪表盘、财务分析报告、运营监控看板、市场表现分析。 日期范围选择器、区域/产品线筛选器、图表联动钻取、指标切换、趋势线开关、数据导出。
数据可视化平台 Tableau, Power BI, Qlik Sense, Looker, Superset等平台的核心功能。 丰富的控件(筛选器、参数)、跨视图联动、即席探索(拖拽字段)、书签/故事分享。
大屏数据监控 指挥中心、工厂生产监控、网络运营中心(NOC)、交易大厅实时看板。 自动刷新、关键指标突出显示(阈值告警)、地图区域钻取、时间轴播放、实时数据流展示。 (强调实时性与关键信息突出)
地理空间分析 人口分布热力图、门店选址分析、物流路径优化、疫情传播追踪、区域销售业绩地图。 地图缩放平移、区域选择/高亮、图层切换(点/热力/区域)、地图标记点信息悬停、路径绘制与测量。
科学研究与工程 复杂模型结果可视化(流体力学、分子结构)、实验数据分析、传感器网络监控、大规模仿真结果探索。 3D模型旋转缩放、参数调节滑块实时更新图表、数据切片查看、多变量对比切换、动画播放模拟过程。
金融分析 股票行情分析(K线图)、投资组合分析、风险管理仪表盘、宏观经济指标趋势分析。 时间范围缩放(分钟/日/月/年)、技术指标叠加/开关、多股对比、交易量联动、钻取到明细交易数据。
网络与数字分析 网站流量分析(用户行为路径、来源渠道)、APP用户行为分析、社交媒体舆情监控、广告效果分析。 用户细分筛选、行为路径图点击钻取、转化漏斗步骤分析、时间对比、维度下钻(设备/地域)。
公共数据开放 政府开放数据平台、统计年鉴在线版、环境监测数据发布、公共卫生数据查询。 多维度筛选(年份、地区、指标)、图表类型切换、数据下载、简单对比功能。
教育与演示 交互式教材、动态演示文稿、在线数据素养课程。 步骤引导式探索、参数调节观察变化、知识点的动态图解、测验反馈与图表更新。
技术类别 代表工具/库 特点与适用场景
专业BI/可视化工具 Tableau, Power BI, Qlik Sense, Looker, Google Data Studio, Superset, Metabase 开箱即用,提供丰富的可视化类型和强大的交互控件(筛选器、参数、联动、钻取),适合快速构建复杂仪表盘和报表,用户友好,学习曲线相对平缓。
JavaScript 可视化库 D3.js, ECharts, Highcharts, Chart.js, Plotly.js, Apache ECharts, Leaflet (地图) 高度灵活与定制化。D3.js功能最强大但学习曲线陡峭;ECharts/Highcharts等提供丰富图表类型和交互API,适合前端开发人员嵌入Web应用。Plotly.js支持3D和科学图表。
Python 数据科学生态 Plotly (Python), Bokeh, Dash (基于Plotly), Panel, Altair/Vega-Lite 在Jupyter Notebook或构建Web应用中创建交互图表。Dash/Panel专注于构建交互式数据应用仪表盘。适合数据科学家和Python开发者。
R 语言生态 Shiny, Plotly (R), ggplot2 (扩展交互) Shiny框架是R语言构建交互式Web应用的强大工具。Plotly for R可将ggplot2静态图转为交互式。适合统计学家和R用户。
Web框架集成 在React, Vue, Angular等框架中使用上述JS库 (ECharts, D3, Highcharts组件) 与现代前端框架深度集成,构建复杂单页面应用(SPA)中的交互式数据可视化模块。
地图专用库 Leaflet, Mapbox GL JS, OpenLayers, Cesium (3D) 专注于构建交互式Web地图,提供丰富的图层控制、标记、弹出窗口、绘制、地理搜索等交互功能。

绘图库介绍

go.Figure() 是 Plotly 库(特别是 plotly.graph_objects 模块)的核心类,用于创建高度可定制、交互式的数据可视化图表。

函数签名(Function Signature)

  • go.Figure:表示一个完整的图表对象,包含 数据(Traces)布局(Layout) 和 框架(Frames,用于动画)

  • Traces:实际绘制的图形元素(如散点图、柱状图、热力图等)。

  • Layout:控制图表外观(标题、坐标轴、图例、注释等)。

  • Frames:用于创建动画的帧序列。

Traces

类型 描述 示例
go.Scatter 散点图/线图 mode="lines+markers"
go.Bar 柱状图 x=["A","B"], y=[1,2]
go.Histogram 直方图 x=data, nbinsx=20
go.Pie 饼图 labels=..., values=...
go.Heatmap 热力图 z=[[1,2],[3,4]]
go.Box 箱线图 y=data, name="Group1"

Layout 

layout = go.Layout(
    title="Chart Title",       # 标题
    width=800, height=500,    # 尺寸
    margin=dict(l=50, r=50),  # 边距
    font=dict(family="Arial"),# 字体
    hovermode="x unified",    # 悬停模式
    showlegend=True,          # 显示图例
    xaxis=dict(...),          # 单独设置 X 轴
    yaxis=dict(...),          # 单独设置 Y 轴
)

 示例代码

import plotly.graph_objects as go
import numpy as np

# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 创建图表对象
fig = go.Figure()

# 添加折线图
fig.add_trace(go.Scatter(
    x=x,
    y=y,
    mode='lines',
    name='正弦波',
    line=dict(color='royalblue', width=3)
))

# 添加关键点标记
max_point = (5*np.pi/2, 1)
min_point = (3*np.pi/2, -1)
fig.add_trace(go.Scatter(
    x=[max_point[0], min_point[0]],
    y=[max_point[1], min_point[1]],
    mode='markers',
    marker=dict(size=12, color='red'),
    name='关键点'
))

# 添加注解
fig.add_annotation(
    x=max_point[0],
    y=max_point[1],
    text="最大值点",
    showarrow=True,
    arrowhead=3,
    ax=-50,
    ay=-40,
    font=dict(size=14, color="black"),
    bgcolor="white",
    bordercolor="black",
    borderwidth=1
)

fig.add_annotation(
    x=min_point[0],
    y=min_point[1],
    text="最小值点",
    showarrow=True,
    arrowhead=3,
    ax=50,
    ay=40,
    font=dict(size=14, color="black"),
    bgcolor="white",
    bordercolor="black",
    borderwidth=1
)

# 添加水平参考线
fig.add_hline(y=0, line_dash="dash", line_color="gray")

# 添加标题和坐标轴标签
fig.update_layout(
    title='交互式正弦波图表 (带注解)',
    xaxis_title='X轴',
    yaxis_title='Y轴',
    showlegend=True,
    template='plotly_white',
    hovermode='x unified'
)

# 保存为交互式HTML文件
fig.write_html("interactive_sine_wave.html")

# 保存为静态图片(需要安装kaleido)
fig.write_image("static_sine_wave.png", scale=2)

print("图表已保存为:")
print("1. 交互式HTML: interactive_sine_wave.html")
print("2. 静态PNG图片: static_sine_wave.png")

Python绘图库及图像类型之高级可视化_第4张图片

网络图(draw_networkx_nodes/draw_networkx_edges)

Python之networkx绘制网络图_python画网络图-CSDN博客https://blog.csdn.net/Yhw20040823/article/details/141205640

作用类别 具体作用描述 典型实现场景举例 典型工具/平台示例
可视化复杂关系 直观展示实体(节点)之间的连接(边)模式和结构。 社交网络分析: 展示用户之间的好友关系、关注关系。
组织结构图: 展示公司部门、员工间的汇报关系。
论文引用网络: 展示学术论文之间的引用关系。
知识图谱: 可视化概念、实体及其语义关系。
Gephi, Cytoscape, NetworkX, D3.js, Neo4j Bloom
揭示结构与模式 识别网络中的关键结构特征,如社群/社区、中心节点、桥节点、隔离节点、层级结构等。 社群发现: 在社交网络或协作网络中识别关系紧密的群体(社区)。
关键节点识别: 找出信息传播中的意见领袖(社交网络)、交通枢纽(交通网络)、关键蛋白质(生物网络)。
层级分析: 分析组织结构或知识体系中的层级关系。
Gephi, Cytoscape, igraph, NetworkX
路径与连通性分析 分析节点间的最短路径、连通性、信息/资源流动的效率与瓶颈。 路由优化: 在网络基础设施(互联网、交通)中寻找最优路径。
影响力传播模拟: 模拟信息、疾病或创新在社交网络中的传播路径和范围。
依赖分析: 分析IT系统组件或供应链中的依赖关系和故障传播风险。
NetworkX, igraph, Neo4j, 专用路由/仿真软件
模式识别与洞察 发现隐藏的模式、异常点、潜在关系或趋势。 欺诈检测: 识别金融交易网络中异常的关联模式(如洗钱)。
推荐系统: 基于用户-物品交互网络或用户相似性网络进行推荐。
科研合作分析: 发现跨学科或新兴的合作趋势。
生物网络分析: 识别基因调控网络或蛋白质相互作用网络中的功能模块或关键通路。
Neo4j, TigerGraph, NetworkX, 机器学习框架 + 可视化库
简化复杂性 将大规模、高维度的关系数据抽象为更易于理解和沟通的图形表示。 系统架构图: 简化展示复杂软件系统或IT基础设施的组件及其交互。
项目管理: 可视化任务依赖关系(关键路径法)。
概念图/思维导图: 组织和展示想法、知识点之间的关联。
Lucidchart, Miro, Draw.io, yEd
动态演变分析 展示网络结构随时间的变化,揭示演化趋势和关键事件的影响。 社交网络演化: 观察社群形成、用户关系变化。
引文网络增长: 追踪学科领域知识结构的发展。
疾病传播追踪: 可视化疫情传播路径和范围的变化。
Gephi (动态插件), D3.js (动画), 定制开发

绘图库介绍

函数签名(Function Signature)

draw_networkx_nodes(G, pos, **kwargs)

  • 功能:绘制网络图中的节点

  • 核心参数

    • G:NetworkX图对象

    • pos:节点位置字典(例如通过spring_layout等布局算法生成)

    • nodelist:要绘制的节点列表(默认为所有节点)

    • node_size:节点大小(默认为300)

    • node_color:节点颜色(默认为红色'r')

    • node_shape:节点形状(默认为圆形'o')

    • alpha:透明度(0-1)

    • linewidths:节点边界宽度

    • edgecolors:节点边界颜色

draw_networkx_edges(G, pos, **kwargs)

  • 功能:绘制网络图中的边

  • 核心参数

    • G:NetworkX图对象

    • pos:节点位置字典

    • edgelist:要绘制的边列表(默认为所有边)

    • width:边宽度(默认为1.0)

    • edge_color:边颜色(默认为黑色'k')

    • style:边样式(默认为实线'-')

    • alpha:透明度(0-1)

    • arrowstyle:箭头样式(有向图)

    • arrows:是否显示箭头(有向图)

    • connectionstyle:连接样式(如弧线)

示例代码

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

# 创建有向图
G = nx.DiGraph()

plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统
# plt.rcParams['font.sans-serif'] = ['Songti SC']  # Mac系统
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题


# 添加节点(城市)
cities = ["北京", "上海", "广州", "深圳", "杭州", "成都", "武汉", "西安", "南京", "重庆"]
G.add_nodes_from(cities)

# 添加边(城市间的连接关系)
connections = [
    ("北京", "上海", 1200),
    ("北京", "广州", 2100),
    ("北京", "成都", 1500),
    ("上海", "杭州", 180),
    ("上海", "南京", 300),
    ("广州", "深圳", 140),
    ("广州", "武汉", 900),
    ("深圳", "重庆", 1200),
    ("杭州", "南京", 280),
    ("成都", "重庆", 310),
    ("武汉", "南京", 500),
    ("武汉", "西安", 700),
    ("西安", "重庆", 650),
    ("南京", "重庆", 1250)
]

for start, end, distance in connections:
    G.add_edge(start, end, weight=distance)

# 设置节点位置(使用环形布局)
pos = nx.circular_layout(G)

# 创建图形
plt.figure(figsize=(12, 10), facecolor='#f0f8ff')
plt.title("中国主要城市交通网络图", fontsize=16, fontweight='bold', pad=20)

# 绘制节点
node_colors = plt.cm.tab20(np.linspace(0, 1, len(cities)))
nx.draw_networkx_nodes(G, pos, node_size=1800, node_color=node_colors, edgecolors='black', alpha=0.9)

# 绘制边
edge_colors = [G[u][v]['weight'] for u, v in G.edges()]
edge_widths = [G[u][v]['weight']/300 for u, v in G.edges()]
nx.draw_networkx_edges(
    G, pos, edge_color=edge_colors,
    edge_cmap=plt.cm.autumn, width=edge_widths,
    alpha=0.7, arrowstyle='->', arrowsize=15
)

# 添加节点标签
nx.draw_networkx_labels(G, pos, font_size=10, font_family='SimHei', font_weight='bold')

# 添加边标签(距离)
edge_labels = {(u, v): f"{d['weight']}km" for u, v, d in G.edges(data=True)}
nx.draw_networkx_edge_labels(
    G, pos, edge_labels=edge_labels,
    font_size=8, font_color='#006400',
    bbox=dict(alpha=0.7, boxstyle="round", facecolor='white', edgecolor='none')
)

# 添加注解
plt.annotate("首都", xy=pos["北京"], xytext=(pos["北京"][0]-0.1, pos["北京"][1]+0.1),
             arrowprops=dict(arrowstyle="fancy", color='#8B4513', connectionstyle="arc3,rad=0.2"),
             bbox=dict(boxstyle="round", facecolor='#FFFACD', alpha=0.8), fontsize=10)

plt.annotate("经济中心", xy=pos["上海"], xytext=(pos["上海"][0]+0.05, pos["上海"][1]+0.15),
             arrowprops=dict(arrowstyle="->", color='#8B4513', connectionstyle="arc3,rad=-0.2"),
             bbox=dict(boxstyle="round", facecolor='#FFFACD', alpha=0.8), fontsize=10)

plt.annotate("最短距离: 140km", xy=pos["广州"], xytext=(pos["广州"][0]-0.3, pos["广州"][1]-0.2),
             arrowprops=dict(arrowstyle="wedge", color='#006400', connectionstyle="arc3,rad=-0.2"),
             bbox=dict(boxstyle="round", facecolor='#90EE90', alpha=0.7), fontsize=9)

plt.annotate("最长距离: 2100km", xy=pos["北京"], xytext=(pos["北京"][0]-0.4, pos["北京"][1]-0.2),
             arrowprops=dict(arrowstyle="wedge", color='#8B0000', connectionstyle="arc3,rad=0.3"),
             bbox=dict(boxstyle="round", facecolor='#FFB6C1', alpha=0.7), fontsize=9)

# 添加图例说明
plt.figtext(0.5, 0.01,
            "说明: 箭头方向表示交通方向 | 线宽表示距离远近 | 线色表示距离长短(红远绿近)",
            ha="center", fontsize=10, bbox=dict(facecolor='#F5F5F5', alpha=0.5))

# 添加色标说明
cbar = plt.colorbar(plt.cm.ScalarMappable(cmap=plt.cm.autumn), ax=plt.gca(), shrink=0.7)
cbar.set_label('距离 (km)', fontsize=10)

# 添加网格
plt.grid(True, linestyle='--', alpha=0.2)

# 保存图片
plt.savefig("china_city_network.png", dpi=300, bbox_inches='tight')

# 显示图形
plt.tight_layout()
plt.show()

Python绘图库及图像类型之高级可视化_第5张图片

你可能感兴趣的:(python,开发语言,plotly,heatmap,violinplot,交互式图表,网络图)