day-044-Matplotlib进阶-高级图表

发布时间:2026/7/28 0:26:56

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接口

2026/7/28 0:26:56

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

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

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

2026/7/28 0:26:55

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

港科大EMBA全球排第几?民营企业家择校选择指南

港科大EMBA全球排第几?民营企业家择校选择指南

2026/7/28 0:16:55

一、前言:民营企业家EMBA择校核心逻辑民营企业家、企业创始人择校EMBA,普遍面临排名模糊、课程适配不清、圈层资源不符、性价比难判断等痛点。本文将从全球办学排名、院校办学定位、课程体系、学员圈层、产业资源五大客观维度,横向对比主流头…

3个步骤+5个参数:用Audio Slicer让音频剪辑告别手动时代

3个步骤+5个参数:用Audio Slicer让音频剪辑告别手动时代

2026/7/28 1:26:58

3个步骤5个参数:用Audio Slicer让音频剪辑告别手动时代 【免费下载链接】audio-slicer A simple GUI application that slices audio with silence detection 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 还在为处理录音文件中的静音部分而烦…

3分钟搞定B站缓存视频转换:让m4s格式秒变mp4的傻瓜式方案

3分钟搞定B站缓存视频转换:让m4s格式秒变mp4的傻瓜式方案

2026/7/28 1:26:58

3分钟搞定B站缓存视频转换:让m4s格式秒变mp4的傻瓜式方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否也遇到过这样的尴尬时…

WarcraftHelper:魔兽争霸III终极兼容性革命方案

WarcraftHelper:魔兽争霸III终极兼容性革命方案

2026/7/28 1:26:58

WarcraftHelper:魔兽争霸III终极兼容性革命方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否曾因魔兽争霸III在现代系统上卡顿而…

如何5分钟内完成HS2游戏全面增强:HS2-HF_Patch完整实施指南

如何5分钟内完成HS2游戏全面增强:HS2-HF_Patch完整实施指南

2026/7/28 1:26:58

如何5分钟内完成HS2游戏全面增强:HS2-HF_Patch完整实施指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否正在为《Honey Select 2》的语言障…

MiniCode 项目详解8:上下文压缩

MiniCode 项目详解8:上下文压缩

2026/7/28 1:26:58

零、先定位:这套代码在整条链路中的位置agent_loop.py 主循环:step_start:context_cybernetics.run_cycle(messages) ← interview5.md 讲过了(控制论决策层)└─ ContextCompactor.process_request() ← 本篇主角(压缩执行…

如何用开源机器人操作系统openpilot升级300+车型的驾驶体验?[特殊字符]

如何用开源机器人操作系统openpilot升级300+车型的驾驶体验?[特殊字符]

2026/7/28 1:16:57

如何用开源机器人操作系统openpilot升级300车型的驾驶体验?🚗 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/27 8:45:59

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/27 8:42:17

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/27 14:56:57

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

零基础搭建桌面智能体,OpenClaw 2.7.9 分步实操,避开绝大多数部署陷阱

零基础搭建桌面智能体,OpenClaw 2.7.9 分步实操,避开绝大多数部署陷阱

2026/7/28 0:06:55

📌 一、工具核心优势盘点 数据本地存储,安全系数高所有操作日志、文档资料均保存在本机,不会上传至云端,能够有效保护企业文件与个人隐私,规避数据泄露风险。 上手简单,零编程门槛采用全图形化可视化界面&…

计算机毕业设计之基于springboot的购物平台设计与实现

计算机毕业设计之基于springboot的购物平台设计与实现

2026/7/28 0:06:55

由于移动应用技术的持续性的快速发展,现实生活中人们大多数都是通过移动手机、电脑等智能设备来完成生活中的事务。因此,许多的人工传统行业也开始与互联网结合,不再一味的依靠人工手动,努力打造半自动数字化甚至是全自动数字化模…

豆包AI绘图提示词失效真相:NLP模型层token截断机制首次披露,3招绕过字数限制

豆包AI绘图提示词失效真相:NLP模型层token截断机制首次披露,3招绕过字数限制

2026/7/28 0:06:55

更多请点击: https://codechina.net 第一章:豆包AI绘图提示词失效现象全景扫描 近期大量用户反馈,豆包(Doubao)AI绘图功能对常规提示词(Prompt)响应异常:语义明确的指令被忽略、中英…