day-044-Matplotlib进阶-高级图表
Day 44Matplotlib 进阶——统计图表与3D绘图柱状图、折线图、饼图已经熟练了。今天学更有分析味的图表箱线图看分布、小提琴图看分布形状、六边形热力图大数据散点、以及 Matplotlib 的 3D 功能。一、箱线图 boxplot()——一眼看清数据分布箱线图是数据分析和论文中最常用的统计图之一能同时展示中位数、四分位数、异常值。importmatplotlib.pyplotaspltimportnumpyasnp plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falsenp.random.seed(42)# 模拟数据四个班级的考试成绩class_Anp.random.normal(75,10,50)# 平均75标准差10class_Bnp.random.normal(80,8,50)# 平均80标准差8class_Cnp.random.normal(70,15,50)# 平均70标准差15离散大class_Dnp.random.normal(85,12,50)# 平均85标准差12data[class_A,class_B,class_C,class_D]labels[一班,二班,三班,四班]fig,axesplt.subplots(1,2,figsize(14,5))# --- 图1基础箱线图 ---bpaxes[0].boxplot(data,labelslabels,patch_artistTrue,showmeansTrue)# 配色colors[#FF6B6B,#4ECDC4,#45B7D1,#96CEB4]forpatch,colorinzip(bp[boxes],colors):patch.set_facecolor(color)patch.set_alpha(0.7)axes[0].set_ylabel(考试成绩,fontsize12)axes[0].set_title(班级成绩箱线图,fontsize14,fontweightbold)axes[0].grid(True,alpha0.3,axisy)# --- 图2横向箱线图 散点叠加 ---bp2axes[1].boxplot(data,labelslabels,patch_artistTrue,vertFalse,showmeansTrue,meanpropsdict(markerD,markerfacecolorred,markersize8))forpatch,colorinzip(bp2[boxes],colors):patch.set_facecolor(color)patch.set_alpha(0.5)# 叠加原始数据点fori,(d,color)inenumerate(zip(data,colors),1):jitternp.random.normal(0,0.04,len(d))# 加抖动避免重叠axes[1].scatter(d,ijitter,alpha0.4,s20,colorcolor,edgecolorwhite,zorder3)axes[1].set_xlabel(考试成绩,fontsize12)axes[1].set_title(横向箱线图 原始数据点,fontsize14,fontweightbold)axes[1].grid(True,alpha0.3,axisx)plt.tight_layout()plt.show()箱线图怎么读┬ ─── 最大值上边缘 │ │ ┬ ─── 上四分位数 Q375% │ │ │ ───┼─── ─── 中位数50% │ │ │ ┴ ─── 下四分位数 Q125% │ ┴ ─── 最小值下边缘 ○ ─── 异常值离群点二、小提琴图 violinplot()——箱线图的升级版小提琴图 箱线图 密度曲线。既能看到统计量又能看到数据分布形状。fig,axesplt.subplots(1,2,figsize(14,5))# --- 图1基础小提琴图 ---vpaxes[0].violinplot(data,positions[1,2,3,4],showmeansTrue,showmediansTrue)fori,bodyinenumerate(vp[bodies]):body.set_facecolor(colors[i])body.set_alpha(0.7)axes[0].set_xticks([1,2,3,4])axes[0].set_xticklabels(labels)axes[0].set_ylabel(考试成绩,fontsize12)axes[0].set_title(小提琴图,fontsize14,fontweightbold)axes[0].grid(True,alpha0.3,axisy)# --- 图2箱线图 vs 小提琴图对比 ---# 同数据一半箱线图一半小提琴图data_combinednp.concatenate(data)labels_combinednp.repeat(labels,[len(d)fordindata])axes[1].boxplot(data,labelslabels,patch_artistTrue,widths0.3,positionsnp.arange(1,5)-0.15,showfliersFalse)vp2axes[1].violinplot(data,positionsnp.arange(1,5)0.15,showmediansTrue)fori,bodyinenumerate(vp2[bodies]):body.set_facecolor(colors[i])body.set_alpha(0.5)axes[1].set_xticks([1,2,3,4])axes[1].set_xticklabels(labels)axes[1].set_title(箱线图(左) 小提琴图(右) 同框对比,fontsize14,fontweightbold)axes[1].grid(True,alpha0.3,axisy)plt.tight_layout()plt.show()三、hexbin()——海量散点的高效可视化普通散点图数据一多就糊成一片。hexbin()用六边形格子统计每个区域的数据密度。np.random.seed(42)n10000# 一万个点# 模拟有相关性的双变量数据mean[0,0]cov[[1,0.7],[0.7,1]]x,ynp.random.multivariate_normal(mean,cov,n).T fig,axesplt.subplots(1,3,figsize(16,5))# --- 普通散点图 ---axes[0].scatter(x,y,s1,alpha0.3,color#5B9BD5)axes[0].set_title(f普通散点图 (n{n})\n糊成一片)axes[0].set_xlabel(X)axes[0].set_ylabel(Y)axes[0].grid(True,alpha0.3)# --- hexbin 六边形热力图 ---hbaxes[1].hexbin(x,y,gridsize40,cmapYlOrRd,mincnt1)plt.colorbar(hb,axaxes[1],label数据点数,shrink0.8)axes[1].set_title(hexbin 六边形密度图\n密度分布一目了然)axes[1].set_xlabel(X)axes[1].set_ylabel(Y)# --- 带等高线的 hexbin ---axes[2].hexbin(x,y,gridsize40,cmapBlues,mincnt1)# 叠加 KDE 等高线用 scipyfromscipy.statsimportgaussian_kde kdegaussian_kde(np.vstack([x,y]))xi,yinp.mgrid[-4:4:100j,-4:4:100j]zikde(np.vstack([xi.flatten(),yi.flatten()])).reshape(xi.shape)axes[2].contour(xi,yi,zi,levels6,colorsred,linewidths1.5,alpha0.7)axes[2].set_title(hexbin KDE 等高线)axes[2].set_xlabel(X)axes[2].set_ylabel(Y)plt.tight_layout()plt.show()四、3D 绘图入门Matplotlib 可以画 3D 图虽然不如专业工具强大但日常够用。# 导入 3D 模块frommpl_toolkits.mplot3dimportAxes3D# 虽未显式用但必须导入4.1 3D 曲线figplt.figure(figsize(14,5))# --- 3D 螺旋线 ---ax1fig.add_subplot(1,2,1,projection3d)tnp.linspace(0,4*np.pi,200)xnp.sin(t)ynp.cos(t)zt ax1.plot(x,y,z,b-,linewidth2)ax1.set_xlabel(X)ax1.set_ylabel(Y)ax1.set_zlabel(Z)ax1.set_title(3D 螺旋线,fontsize12,fontweightbold)# --- 3D 散点图 ---ax2fig.add_subplot(1,2,2,projection3d)np.random.seed(42)n300xsnp.random.randn(n)ysnp.random.randn(n)zsxs**2ys**2np.random.randn(n)*0.5scax2.scatter(xs,ys,zs,czs,cmapviridis,s20,alpha0.7)plt.colorbar(sc,axax2,shrink0.6,labelZ值)ax2.set_xlabel(X)ax2.set_ylabel(Y)ax2.set_zlabel(Z X² Y² noise)ax2.set_title(3D 散点图,fontsize12,fontweightbold)plt.tight_layout()plt.show()4.2 3D 曲面图# 曲面图 plot_surfacexnp.linspace(-5,5,100)ynp.linspace(-5,5,100)X,Ynp.meshgrid(x,y)Znp.sin(np.sqrt(X**2Y**2))# 涟漪函数figplt.figure(figsize(14,5))# --- 曲面图 ---ax1fig.add_subplot(1,2,1,projection3d)surfax1.plot_surface(X,Y,Z,cmapviridis,alpha0.85,linewidth0,antialiasedTrue)plt.colorbar(surf,axax1,shrink0.6,labelZ值)ax1.set_xlabel(X)ax1.set_ylabel(Y)ax1.set_zlabel(Z)ax1.set_title(plot_surface 曲面图,fontsize12,fontweightbold)# --- 线框图 ---ax2fig.add_subplot(1,2,2,projection3d)ax2.plot_wireframe(X,Y,Z,rstride5,cstride5,colorsteelblue,alpha0.6,linewidth0.5)ax2.set_xlabel(X)ax2.set_ylabel(Y)ax2.set_zlabel(Z)ax2.set_title(plot_wireframe 线框图,fontsize12,fontweightbold)plt.tight_layout()plt.show()4.3 3D 柱状图figplt.figure(figsize(8,6))axfig.add_subplot(111,projection3d)# 模拟 5天的4种产品销售数据daysnp.arange(5)productsnp.arange(4)data_3dnp.random.randint(10,100,(5,4))colors_3d[#FF6B6B,#4ECDC4,#45B7D1,#FFEAA7]_xnp.arange(5)# 天数_ynp.arange(4)# 产品_xx,_yynp.meshgrid(_x,_y)x_flat,y_flat_xx.ravel(),_yy.ravel()z_flatnp.zeros_like(x_flat)dxdy0.6dzdata_3d.T.ravel()# 每个柱子按产品颜色bar_colorsnp.repeat(colors_3d,5)ax.bar3d(x_flat,y_flat,z_flat,dx,dy,dz,colorbar_colors,alpha0.7,edgecolorwhite)ax.set_xlabel(天数)ax.set_ylabel(产品)ax.set_zlabel(销量)ax.set_xticks(_x)ax.set_yticks(_y)ax.set_yticklabels([手机,电脑,平板,耳机])ax.set_title(3D 柱状图5天 × 4产品,fontsize14,fontweightbold)plt.tight_layout()plt.show()五、踩坑记录 坑现象解决方案箱线图中文乱码标签出现方块确保 rcParams 字体设置在最前面violinplot 位置偏移图和标签对不齐手动指定positions[1,2,3...]hexbin 颜色全一样密度差异看不出调整gridsize越小格子越大越容易区分3D 图交互卡顿旋转视角很慢减少数据点或用rstride/cstride降低精度3D 图视角不对默认角度看不清ax.view_init(elev30, azim45)调整仰角和方位角scipy 未安装gaussian_kde 报错pip install scipy或跳过等高线部分六、总结图表类型函数一句话用途箱线图boxplot()比较组间分布差异小提琴图violinplot()看分布形状统计量六边形热力图hexbin()海量散点的密度分布3D曲线plot()with projection“3d”空间曲线3D曲面plot_surface()函数zf(x,y)可视化3D柱状bar3d()三维数据对比今天学完Matplotlib 能画的图表类型你已经掌握了 90%。明天是 Matplotlib 的最终篇——综合实战把前面 4 天的知识全部用在一个完整项目中。第44天打卡完成本系列是个人学习笔记如有错误欢迎在评论区指正交流。

相关新闻

【剪映Pro级智能工作流】:2024最新版隐藏功能深度解锁,仅限前500名认证用户调用的AI增强API接口

【剪映Pro级智能工作流】:2024最新版隐藏功能深度解锁,仅限前500名认证用户调用的AI增强API接口

更多请点击: https://kaifayun.com 第一章:剪映Pro级智能工作流的演进逻辑与技术架构 剪映Pro并非简单叠加AI功能的视频编辑工具,而是以“感知—决策—执行”闭环为内核重构的智能创作操作系统。其工作流演进本质是从线性时间轴操作转向多模…

2026/7/28 0:26:52 阅读更多 →
150、实时性与延迟优化:从Sensor到Display的端到端延迟控制

150、实时性与延迟优化:从Sensor到Display的端到端延迟控制

150、实时性与延迟优化:从Sensor到Display的端到端延迟控制 一、一个让我失眠三天的延迟问题 去年做一款高端旗舰机的影像系统,客户反馈了一个极其诡异的问题:在暗光环境下开启夜景模式,按下快门后,取景画面会“卡”住大约200ms,然后才恢复正常。测试团队一开始以为是算…

2026/7/28 0:26:52 阅读更多 →
Excel 批量处理效率瓶颈,多款办公表格工具客观使用记录

Excel 批量处理效率瓶颈,多款办公表格工具客观使用记录

日常职场办公数据整理、报表归档、多表格规整工作中,Excel 批量修改、数据清洗、格式统一的重复劳动占比高,不同表格工具在批量处理能力、AI 功能适配、运行方式、数据安全上存在明显区别。下文客观记录五款 Excel 相关工具的基础能力与使用局限&#xf…

2026/7/28 0:25:52 阅读更多 →

最新新闻

HarmonyOS应用开发实战:猫猫大作战-onKeyEvent 三阶段触发、KeyCode 判定具体键、KeyEventSource 判定输入源、与

HarmonyOS应用开发实战:猫猫大作战-onKeyEvent 三阶段触发、KeyCode 判定具体键、KeyEventSource 判定输入源、与

前言 前面我们用 onTouch 处理手势、onHover 处理悬停——但都是「指针」类输入。还有种「按键」类输入:PC 键盘(WASD/方向键/空格)、TV 遥控器(方向键/确认/返回)、手机外接手柄/键盘。这类输入不走触摸/悬停&#x…

2026/7/28 0:33:54 阅读更多 →
HarmonyOS应用开发实战:猫猫大作战-被动批量(同帧)、主动批量(batchUpdate)、跨帧批量的陷阱、批量与深观察的协同

HarmonyOS应用开发实战:猫猫大作战-被动批量(同帧)、主动批量(batchUpdate)、跨帧批量的陷阱、批量与深观察的协同

前言 第 32 篇我们讲过「同帧批量更新」——一个回调里改多个 State,ArkUI 合并成一次重渲染。但那是「被动批量」——靠回调天然同帧。实战中还有「主动批量」场景:连续多次逻辑操作改 state,要强制合并成一次重渲染,避免中途触…

2026/7/28 0:33:54 阅读更多 →
HarmonyOS应用开发实战:猫猫大作战-秒级计时器周期、gameTime 递增与格式化、暂停不计时间、计时器与主循环的分工

HarmonyOS应用开发实战:猫猫大作战-秒级计时器周期、gameTime 递增与格式化、暂停不计时间、计时器与主循环的分工

前言 上一篇我们搭好了 100ms 物理主循环——猫咪下落、合并、得分都靠它驱动。但游戏里还有个独立时钟:从开局到结束的累计时间(gameTime)。这个时钟和主循环分离——主循环 100ms 更新物理,计时器 1000ms 递增秒数,…

2026/7/28 0:33:54 阅读更多 →
不懂乐理也能创作商用歌曲?MELO 音乐生成实战:手把手教你打造版权自有神曲

不懂乐理也能创作商用歌曲?MELO 音乐生成实战:手把手教你打造版权自有神曲

前言:在这个时代,创意是唯一的门槛 如果我告诉你,现在创作一首发行级音质、包含人声演唱、编曲完整、且完整版权完全属于你的歌曲,只需要你会打字、会拍照、甚至会随口哼一段调调,你相信吗? 不需要你买昂…

2026/7/28 0:33:54 阅读更多 →
Mission Planner:从飞行控制到任务执行的3种实用解决方案

Mission Planner:从飞行控制到任务执行的3种实用解决方案

Mission Planner:从飞行控制到任务执行的3种实用解决方案 【免费下载链接】MissionPlanner Mission Planner Ground Control Station for ArduPilot (c# .net) 项目地址: https://gitcode.com/gh_mirrors/mi/MissionPlanner 当无人机操作从简单的遥控飞行升级…

2026/7/28 0:33:54 阅读更多 →
Audio Slicer终极指南:如何用智能静音检测实现400倍音频处理效率

Audio Slicer终极指南:如何用智能静音检测实现400倍音频处理效率

Audio Slicer终极指南:如何用智能静音检测实现400倍音频处理效率 【免费下载链接】audio-slicer A simple GUI application that slices audio with silence detection 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 还在为手动剪辑音频的繁琐…

2026/7/28 0:31:53 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻