数据可视化--使用matplotlib绘制高级图表

news2025/6/3 21:40:39

目录

一、绘制等高线图

contour()

二、绘制矢量场流线图

 streamplot()

三、绘制棉棒图

 stem()

四、绘制哑铃图

五、绘制甘特图

六、绘制人口金字塔图

barh()

七、绘制漏斗图

 简易版漏斗图

八、绘制桑基图

 Sankey()---创建桑基图

add()---添加桑基图的选项

finish()---返回桑基图绘制完成的对象

桑基子图包含以下字段

九、绘制树状图

dendrogram()---将层次聚类数据绘制为树状图

linkage()---将一维压缩距离矩阵或二维观测向量阵列进行层次聚类或凝聚聚类

十、绘制华夫饼图

pywaffle的安装 

pywaffle的使用


一、绘制等高线图

等高线图是地形图上高程相等的相邻各点所连成的闭合曲线,它会将地面上海拔高度相同的点连成环线,之后将环线垂直投影到某一水平面上,并按照一定的比例缩绘到图纸上,常见于山谷、山峰或梯度下降算法的场景。

等高线图包含三个主要的信息,分别为坐标点的x值、坐标点y值以及坐标点的高度。假设坐标点的高度为h,则h、x、y之间的关系如下所示:

contour()

contour([X, Y,]Z, [levels,]**kwargs)

X,Y:表示坐标点的网格数据。

Z:表示坐标点对应的高度数据。

levels:表示等高线的数量。若levels为n,则说明绘制n+1条等高线。

colors:表示不同高度的等高线颜色。

cmap:表示颜色映射表。

linewidths:表示等高线的宽度。

linestyles:表示等高线的线型。 

需要注意的是,参数X、Y需要接收网格数据,即以坐标矩阵批量地描述点的位置。numpy模块的meshgrid()函数可以生成网格数据。

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 定义计算高程的函数
def calcu_elevation(x, y):
    return np.sin(np.sqrt(x**2 + y**2))
# 生成网格数据
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
x_grid, y_grid = np.meshgrid(x, y)
# 创建图形和子图
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)
# 绘制等高线
con = ax.contour(x_grid, y_grid, calcu_elevation(x_grid, y_grid), 8, colors='black')
# 填充等高线的颜色
ax.contourf(x_grid, y_grid, calcu_elevation(x_grid, y_grid), 8, alpha=0.75, cmap=plt.cm.copper)
# 为等高线添加文字标签
ax.clabel(con, inline=True, fmt='%1.1f', fontsize=10)
# 添加标题和标签
ax.set_title('等高线图示例', fontsize=15)
ax.set_xlabel('X轴', fontsize=12)
ax.set_ylabel('Y轴', fontsize=12)
# 添加颜色条
cbar = plt.colorbar(ax.contourf(x_grid, y_grid, calcu_elevation(x_grid, y_grid), 8, alpha=0.75, cmap=plt.cm.copper))
cbar.set_label('高程', fontsize=12)
# 显示网格线
plt.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()

 

二、绘制矢量场流线图

矢量场流线图可以表现矢量场的流态,常见于科学和自然学科中的磁场、万有引力和流体运动等场景。

矢量场流线图包含多条带有箭头的线条,其中线条的长度表示矢量场的强度,箭头的方向表示矢量场的方向。此外,矢量场的强度也可以使用线条的密度来表示。

 streamplot()

streamplot(x, y, u, v, density=1, linewidth=None, col=None, cmap=None, norm=None,  arrowsize=1, arrowstyle='-|>', minlength=0.1, transform=None, zorder=None,  start_points=None, maxlength=4.0, integration_direction='both', *, data=None)

x,y:表示间距均匀的网格数据。

u,v:表示(x,y)速率的二维数组。

density:表示流线的密度。

linewidth:表示流线的宽度。

arrowsize:表示箭头的大小。

arrowstyle:表示箭头的类型。

minlength:表示流线的最小长度。

maxlength:表示流线的最大长度。

import numpy as np
import matplotlib.pyplot as plt
y, x = np.mgrid[0:5:50j, 0:5:50j]
u = x
v = y
fig = plt.figure()
ax = fig.add_subplot(111)
# 绘制矢量场流线图
ax.streamplot(x, y, u, v)
plt.show()

三、绘制棉棒图

棉棒图亦称为火柴杆图、大头针图或棒棒糖图,由线段(茎)与标记符号(茎头,默认为圆点)连接而成,其中线段表示数据点到基线的距离,标记符号表示数据点的数值。

棉棒图是柱形图或条形图的变形,主要用于比较标记符号的相对位置,而非比较线段的长度。

 stem()

stem([x,] y, linefmt=None, markerfmt=None, basefmt=None, bottom=0,  label=None, use_line_collection=False, data=None)

x,y:表示茎的x值和茎头的y值。

linefmt:表示茎属性的字符串。

markerfmt:表示茎头属性的字符串。

basefmt:表示基线属性的字符串。

bottom:表示基线的y值。 label:表示应用于图例的标签。

use_line_collection:若设为True,则将棉棒图的所有线段存储到一个LineCollection类对象中;若设为False,则将棉棒图的所有线段存储到列表中。

四、绘制哑铃图

哑铃图亦称为DNA图(图表横着看像哑铃,竖着看像DNA),主要用于展示两个数据点之间的变化。

哑铃图可以看作散点图与线型图的组合,适用于比较各种项目“前”与“后”的位置及项目的等级排序的场景。

五、绘制甘特图

甘特图亦称为横道图、条状图,它通过活动列表和时间刻度表示特定项目的顺序与持续时间。甘特图一般以时间为横轴,项目为纵轴,可以直观地展示每个项目的进展情况,便于管理者了解项目的剩余任务及评估工作进度。

使用pyplot的barh()函数可以绘制一个甘特图,只需要给该函数的left参数传值,指定每个矩形条的x坐标即可。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]

# 数据定义
tasks = np.array(['报告提交', '数据分析', '数据录入', '实地执行', '问卷确定', '试访', '问卷设计', '项目确定'])
y_positions = np.arange(1, 9)
durations = np.array([0.5, 1.5, 1, 3, 0.5, 1, 1, 2])
start_times = np.array([7.5, 6, 5.5, 3, 3, 2, 1.5, 0])

# 创建图形和子图
fig, ax = plt.subplots(1, 1, figsize=(12, 8))

# 定义颜色映射(可以根据任务类型分配不同颜色)
colors = ['#CD5C5C', '#3CB371', '#4169E1', '#FFA500', '#9370DB', '#87CEFA', '#DDA0DD', '#90EE90']

# 绘制甘特图条形
bars = ax.barh(y_positions, durations, left=start_times, color=colors, alpha=0.8, edgecolor='black')

# 移除顶部和右侧的边框
[ax.spines[i].set_visible(False) for i in ['top', 'right']]

# 设置左侧和底部边框样式
ax.spines['left'].set_linewidth(1.5)
ax.spines['bottom'].set_linewidth(1.5)

# 设置y轴刻度标签和范围
plt.yticks(y_positions, tasks, ha='right', fontsize=12)
plt.ylim(0, 9)

# 设置x轴刻度和范围
plt.xticks(np.arange(0, 11, 1), fontsize=10)
plt.xlim(0, 10)

# 添加标题
plt.title('项目执行时间安排甘特图', fontsize=16, pad=20)

# 添加x轴标签
plt.xlabel('时间(天)', fontsize=12, labelpad=10)

# 为每个任务添加数据标签
for i, (start, duration, bar) in enumerate(zip(start_times, durations, bars)):
    ax.text(start + duration/2, y_positions[i], f'{duration}天', 
            ha='center', va='center', color='white', fontweight='bold')

# 添加网格线(水平方向)
plt.grid(axis='x', linestyle='--', alpha=0.7)

# 添加图例
legend_elements = [Patch(facecolor=colors[i], edgecolor='black', label=tasks[i]) for i in range(len(tasks))]
ax.legend(handles=legend_elements, loc='upper right', bbox_to_anchor=(1.3, 1), title='任务')

# 调整布局
plt.tight_layout()

# 显示图形
plt.show()

 

六、绘制人口金字塔图

人口金字塔图是指用类似古埃及金字塔的形象描述人口年龄与性别分布状况的图形,用于表现人口的现状及其发展类型。人口金字塔图一般以年龄为纵轴、以人口数为横轴,按年龄自然顺序自下而上在纵轴左侧和右侧绘制并列的横向矩形条,纵轴左侧为男,右侧为女。

barh()

七、绘制漏斗图

漏斗图亦称为倒三角图,它将数据呈现为几个阶段,每个阶段的占比总计为100%,从一个阶段到另一阶段的数据自上而下逐渐降低。漏斗图通过展示业务各阶段数据的变化,可以帮助运营人员快速发现问题,适用于业务流程较为规范、周期长、环节多的流程分析的场景。

 简易版漏斗图

 

 

八、绘制桑基图

桑基图亦称为桑基能量分流图、桑基能量平衡图,是一种特定类型的流程图,用于展示数据的“流动”变化。

桑基图中包含若干条从左到右延展的分支,每条分支的宽度代表着数据流量的大小,且所有主支宽度的总和等于所有分支宽度的总和,常见于能源、材料成分等场景或金融领域。

 Sankey()---创建桑基图

Sankey(ax=None, scale=1.0, unit='', format='%G', gap=0.25, radius=0.1,  shoulder=0.03, offset=0.15, head_angle=100, margin=0.4,  tolerance=1e-06, **kwargs)

ax:若不提供该参数,会创建一个新的坐标轴。

scale:表示流量比例因子比例调整分支的宽度。

unit:表示与流量相关的物理单位的字符串。若设为None,则不会做数量标记。

gap:表示进入或离开顶部或底部的分支之间的间距,默认为0.25。

add()---添加桑基图的选项

add(self, patchlabel='', flows=None, orientations=None, labels='',  trunklength=1.0, pathlengths=0.25, prior=None, connect=(0, 0), rotation=0, **kwargs)

patchlabel:表示位于图表中心的标签。

flows:表示流量数据的数组,其中投入数据为正值,产生数据为负值。

orientations:表示流的方向列表或用于所有流的单个方向,可以取值为0(从左侧输入、右侧输出)、1(从顶部到顶部)或-1(从底部到底部)。

labels:表示流的标签列表或用于所有流的单个标签。

trunklength:表示输入组和输出组的基之间的长度。

finish()---返回桑基图绘制完成的对象

桑基子图包含以下字段

patch:表示桑基子图的轮廓。

flows:表示流量值(输入为正,输出为负)。

angles:表示箭头角度的列表。

tips:表示流路径的尖端或凹陷位置的数组,其中每一行是一个(x, y)。

text:表示中心标签的Text实例。

texts:表示流分支标签的Text实例。

九、绘制树状图

树状图亦称为树枝状图,是一种通过树状结构描述父子成员层次结构的图形。树形图的形状一般是一个上下颠倒的树,其根部是一个没有父成员的根节点,之后从根节点开始是用线连接子成员,使子成员变为子节点,直至线的末端为没有子成员的树叶节点为止。树状图用于说明成员之间的关系和连接,常见于分类学、进化科学、企业组织管理等领域。

dendrogram()---将层次聚类数据绘制为树状图

dendrogram(Z, p=30, truncate_mode=None, color_threshold=None, get_leaves=True, orientation='top', labels=None, count_sort=False, distance_sort=False, show_leaf_counts=True, **kwargs)

Z:表示编码层次聚类的链接矩阵。

truncate_mode:表示截断的模式,用于压缩因观测矩阵过大而难以阅读的树状图,可以取值为None(不执行截断,默认)、'lastp'、'level'。

color_threshold:表示颜色阈值。

labels:表示节点对应的文本标签。

linkage()---将一维压缩距离矩阵或二维观测向量阵列进行层次聚类或凝聚聚类

linkage(y, method='single', metric='euclidean', optimal_ordering=False)

y:可以是一维距离向量或二维的坐标矩阵。

method:表示计算类簇之间距离的方法,常用的取值可以为'single'、 'complete'、 'average'和'ward‘,其中'single'表示将类簇与类簇之间最近的距离作为类簇间距; 'complete' 表示将类簇与类簇之间最远的距离作为类簇间距;'average'表示将类簇与类簇之间的平均距离作为类簇间距;'ward‘表示将每个类簇的方差最小化作为类簇间距。

十、绘制华夫饼图

华夫饼图亦称为直角饼图,它是饼图的变体,可以直观地展示部分与整体的比例。

华夫饼图一般由100个方格组成,其中每个方格代表1%,不同颜色的方格代表不同的分类,常见于比较同类型指标完成比例的场景,比如电影上座率、公司业务实际完成率等。

pywaffle的安装 

pip install pywaffle

 以上命令执行后,若命令提示符窗口出现如下字样,说明pywaffle包安装完成

安装完成后,在提示符的后面输入python,之后输入如下导入语句进行验证:

from pywaffle import Waffle

执行以上语句后,若命令提示符窗口没有出现任何错误信息,说明pywaffle安装成功,否则说明安装失败。

pywaffle的使用

pywaffle是Python中专门绘制华夫饼图的包,它提供了一个继承自Figure的子类Waffle,通过将Waffle类传递给figure()函数的FigureClass参数,即可创建一个华夫饼图。关于figure()函数中创建华夫饼图的常用参数的含义如下:

FigureClass:可以是Figure类或Figure子类。

rows:表示华夫饼图的行数。

columns:表示华夫饼图的列数。

values:表示数据,可以接收数组或字典。若values参数接收一个字典,则将字典的键作为华夫饼图的图例项。

colors:表示每个分类数据的颜色列表。

vertical:表示是否按垂直方向绘制华夫饼图,默认为False。

title:表示标题,可以接收一个字典,其中字典的键为title()函数的关键字参数。

legend:表示图例,可以接收一个字典,其中字典的键为legend()函数的关键字参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何做好一个决策:基于 Excel的决策树+敏感性分析应用

决策点: 开发新产品? (是 / 否) 因素 (如果是): 市场接受度 (高 / 中 / 低);概率: 高(0.3), 中(0.5), 低(0.2) 结果值 (NPV): 高(+$1M), 中(+$0.2M), 低(-$0.5M) 不开发成本/收益: $0 开发计算: EMV(市场接受度) = (0.3 * 1M) + (0.5 * 0.2M) + (0.2 * -0.5M) = $0.3M + $…

【模拟电子电路-工具使用】

模拟电子电路-工具使用 ■ 1. 模拟软件■ 1. circuit JS ■ 2. 万用表■ 3. 示波器■ 4.■ 5.■ 6.■ 7. ■ 1. 模拟软件 ■ 1. circuit JS ■ 2. 万用表 ■ 3. 示波器 ■ 4. ■ 5. ■ 6. ■ 7.

[ElasticSearch] ElasticSearch的初识与基本操作

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

搜索引擎2.0(based elasticsearch6.8)设计与实现细节(完整版)

1 简介 1.1 背景 《搜索引擎onesearch 1.0-设计与实现.docx》介绍了1.0特性,搜索schema,agg,表达式搜索映射,本文介绍onesearch 2.0 新特性, 参考第2节 规划特性与发布计划 1.2 关键词 文档 Document elasticsearch 一行数据称为…

Go 即时通讯系统:客户端与服务端 WebSocket 通信交互

客户端和服务端的交互 客户端与服务端建立连接 客户端:客户端通过浏览器或者其他应用程序发起一个 HTTP 请求到服务端的 /socket.io 路径。在请求中会携带用户的 UUID 作为参数(通过 c.Query("user") 获取)。 // router/socket.…

某航后缀混淆逆向与顶像风控分析

文章目录 1. 写在前面2. 接口分析3. 加密分析4. 风控分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致…

[Protobuf]常见数据类型以及使用注意事项

[Protobuf]常见数据类型以及使用注意事项 水墨不写bug 文章目录 一、基本数据类型1、字段2、字段的修饰规则 二、自定义数据类型1、message类型2、enum类型3、Any类型4、oneof类型5、map类型 三、小工具1.hexdump2.decode 四、注意事项 一、基本数据类型 protobuf 支持多种基础…

模拟实现线程池(线程数目为定值)和定时器

前言 昨天学习关于定时器的相关知识。今天花时间去模拟实现了一个定时器,同时也去模拟实现了一个线程池(线程数目为定值)。我感觉我收获了很多,对于线程的理解加深了。跟大家分享一下~ 线程池和定时器(这个是主要)的实现 代码 线程池 import java.ut…

数据结构之队列实验

引言 在计算机科学中,进制转换是基础但重要的操作。例如将一个十进制数转换为二进制或八进制表示时,我们通常使用“短除法”——即不断用目标进制去除当前数,记录余数,直到商为0为止。 这种方法得到的是低位先产生的结果&#x…

【Ubuntu】摸鱼技巧之虚拟机环境复制

前言 提示:所有的操作都需要关闭虚拟机 如何快速在其它电脑布置,linux环境,如果我们有一个环境直接拷贝就有时间摸鱼呀。 1.直接复制简单粗暴 不做赘述,如果不会复制,那么请右击鼠标压缩复制 2.克隆虚拟机 2.1 …

室内VR全景助力房产营销及装修

在当今的地产行业,VR全景已成为不可或缺的应用工具。从地产直播到楼市VR地图,从效果图到水电家装施工记录,整个地产行业的上下游生态中,云VR全景的身影无处不在。本文将探讨VR全景在房产营销及装修领域的应用,并介绍众…

jenkins集成gitlab实现自动构建

jenkins集成gitlab实现自动构建 前面我们已经部署了Jenkins和gitlab,本文介绍将二者结合使用 项目源码上传至gitee提供公网访问:https://gitee.com/ye-xiao-tian/my-webapp 1、创建一个群组和项目 2、添加ssh密钥 #生成密钥 [rootgitlab ~]# ssh-keyge…

Spring Boot微服务架构(八):开发之初就引入APM工具监控

使用 APM(Application Performance Management)工具监控 Spring Boot 应用,可以帮助开发者实时追踪性能瓶颈、分析调用链路、监控资源使用情况,并快速定位故障。以下是详细的步骤和常用工具的选择指南: ​​一、常用 A…

大规模真实场景 WiFi 感知基准数据集

一段话总结 本文提出CSI-Bench,首个大规模真实场景WiFi感知基准数据集,覆盖26个室内环境、35名用户、16种商用设备,包含461小时有效数据,支持跌倒检测、呼吸监测、定位、运动源识别等单任务及用户身份、活动、 proximity联合标注的多任务学习。通过标准化评估协议和基线模…

Python实现HPSO-TVAC优化算法优化支持向量机SVC分类模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在当今数据驱动的时代,支持向量机(SVM)作为一种经典的机器学习算法,…

ck-editor5的研究 (3):初步使用 CKEditor5 的事件系统和API

前言 在上一篇文章中—— ck-editor5的研究(2):对 CKEditor5 进行设计,并封装成一个可用的 vue 组件 ,我已经把 CKEditor5 封装成了一个通用vue组件,并且成功在nuxt中运行,并具备一定的通用性&…

WPS快速排版

论文包括(按顺序):封面(含题目)、摘 要、关键词、Abstract(英文摘要)、Keywords、目录、正文、参考文献、在读期间发表的学术论文及研究成果,致 谢 题目(黑小一加粗&…

Java实现命令行图书管理系统(附完整源码)

一、项目概述 本文将介绍如何使用Java实现一个基于命令行的图书管理系统。系统支持管理员和普通用户两种角色,提供图书的增删改查、借阅归还等功能。项目采用面向对象设计原则,代码结构清晰,适合Java初学者学习。 二、系统功能架构 graph T…

【数据结构】顺序表和链表详解(上)

前言:上期我们介绍了算法的复杂度,知道的算法的重要性同时也了解到了评判一个算法的好与坏就去看他的复杂度(主要看时间复杂度),这一期我们就从顺序表和链表开始讲起。 文章目录 一,顺序表1,线性表2,顺序表…

唯创WT2606B TFT显示灵动方案,重构电子锁人机互动界面,赋能智能门锁全场景交互!

在智能家居的浪潮中,门锁搭载显示屏已成为行业创新的焦点。据行业数据显示,2023年全球智能门锁出货量中,搭载显示屏的型号占比已突破40%,且年复合增长率达25%。而2024年国内智能门锁销量突破2200万套,预计2025年市场规…