ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Python数据可视化】Matplotlib从零到精通:图表核心解剖、多子图布局与三大经典图表实战

【Python数据可视化】Matplotlib从零到精通:图表核心解剖、多子图布局与三大经典图表实战 在数据分析与机器学习领域“字不如表表不如图”。数据可视化不仅能直观呈现数据内在规律更是向业务方交付成果的关键桥梁。Matplotlib作为 Python 数据可视化领域的基石与开山鼻祖也是应用最广泛的绘图库。无论是静态图表、动态交互还是高出版级期刊插图Matplotlib 都能游刃有余地完成。官方网站https://matplotlib.org安装命令pipinstallmatplotlib️ 必备前置彻底解决中文乱码与负号显示问题在使用 Matplotlib 时由于其默认字体不支持中文常会出现方块乱码□□此外负号也可能显示异常。因此在代码头部加入以下两行配置是标准规范importmatplotlib.pyplotasplt# 解决中文显示乱码Windows常用 SimHeiMac常用 Arial Unicode MS 或 PingFang SCplt.rcParams[font.sans-serif][SimHei]# 解决负号 - 显示为方块的问题plt.rcParams[axes.unicode_minus]False 一、 深度拆解Matplotlib 图表的“解剖学”结构要画好一张图必须先理解一张图由哪些部件构成。Matplotlib 将一张图拆分为以下核心层级------------------------------------------------------- | 画布 (Figure) | | ------------------------------------------------- | | | 标题 (Title) | | | | Y轴标签 (Ylabel) [图例 (Legend)] | | | | ^ | | | | | / \ /\ [网格线 (Grid)] | | | | |------------- | | | | | / \/ \ | | | | ------------------------ X轴 (Xaxis) | | | | Y轴刻度/标签 X轴刻度/标签(Xtick_label) | | | | X轴标签 (Xlabel) | | | ------------------------------------------------- | -------------------------------------------------------核心要素对照表组件名称英文术语对应控制 API核心作用画布Figureplt.figure()/plt.subplots()容纳所有视觉元素的顶级容器坐标系/子图Axesfig.add_subplot()/ax真正绘制图表的绘图区域包含X/Y轴标题Titleplt.title()/ax.set_title()图表的总体说明轴线与标签Axis / Labelplt.xlabel(),plt.ylabel()说明坐标轴所代表的物理含义及单位刻度与刻度标签Tick / Tick Labelplt.xticks(),plt.yticks()标定数值位置与具体文本标注图例Legendplt.legend()区分多条曲线或不同类别数据的标注说明网格线Gridplt.grid()辅助肉眼对齐数值和趋势判断 二、 实战演练绘制双城市气温变化曲线下面通过一个双曲线折线图把上述所有图表组件串联整合importmatplotlib.pyplotaspltimportrandom# 1. 解决中文与负号显示plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False# 2. 准备数据1-24小时北京与西安的气温模拟xrange(1,25)y_beijing[random.randint(10,15)for_inrange(len(x))]y_xa[random.randint(15,19)for_inrange(len(x))]# 3. 绘制折线设置标签 label 用于图例识别plt.plot(x,y_beijing,label北京,color#1f77b4,linewidth2)plt.plot(x,y_xa,label西安,color#ff7f0e,linewidth2)# 4. 图表辅助装饰plt.title(24小时气温变化曲线,fontsize14)plt.xlabel(时间 (小时),fontsize12)plt.ylabel(气温 (℃),fontsize12)# 5. 添加网格线与图例plt.grid(True,linestyle--,alpha0.5)plt.legend(locupper right)# 6. 设置坐标轴刻度及显示范围plt.xticks(x[::2])# X轴每2小时显示一个刻度plt.yticks(range(5,25,2))# Y轴从5℃到25℃步长为2# 7. 渲染输出plt.show() 三、 画布进阶多子图Subplots设计与管理为了能同时展示多个图表便于图表之间数据的直观对比和分析更高效、更专业地组织和呈现复杂的可视化信息通常会在一个画布上创建多个子图。子图核心 APIfigure,axesplt.subplots(nrows1,ncols2,figsize(20,6),dpi100)nrows子图行数ncols子图列数figsize(宽, 高)画布物理尺寸英寸dpi每英寸点数Dots Per Inch控制图像分辨率清晰度axes子图对象数组。如果是一行两列axes[0]代表左图axes[1]代表右图。 四、 三大经典图表选型与实战根据不同的业务场景选用恰当的图表类型图表类型对应 API核心优势黄金应用场景折线图plt.plot()/ax.plot()展示连续数据的趋势变化气温变化、股价走势、时间序列分析柱状图plt.bar()/ax.bar()突出离散类别的数量对比各季度业绩、产品销量对比、各城市营收饼状图plt.pie()/ax.pie()直观展示各部分的占比构成用户画像年龄占比、市场份额、预算配比综合案例在一个画布中联动展示三大图表importmatplotlib.pyplotasplt# 基础设置plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False# 创建 1 行 3 列的子图画布fig,axesplt.subplots(nrows1,ncols3,figsize(18,5),dpi100)# ----------------- 子图 1折线图趋势变化 -----------------months[1月,2月,3月,4月,5月,6月]sales_trend[120,135,170,160,210,240]axes[0].plot(months,sales_trend,markero,colorb,label月销售额)axes[0].set_title(上半年销售额趋势变化)axes[0].set_xlabel(月份)axes[0].set_ylabel(销售额(万元))axes[0].grid(True,linestyle:,alpha0.6)axes[0].legend()# ----------------- 子图 2柱状图数量对比 -----------------categories[服装,电子产品,食品,家居用品,图书]sales_count[450,310,520,180,240]axes[1].bar(categories,sales_count,color#2ca02c,alpha0.85)axes[1].set_title(各品类销售数量对比)axes[1].set_xlabel(产品类别)axes[1].set_ylabel(销量(件))# ----------------- 子图 3饼状图占比构成 -----------------channels[微信支付,支付宝,现金,银行卡]pay_ratio[45,35,5,15]axes[2].pie(pay_ratio,labelschannels,autopct%1.1f%%,startangle140,colors[#ff9999,#66b3ff,#99ff99,#ffcc99])axes[2].set_title(各支付方式占比构成)# 自动调整子图间距防止重叠plt.tight_layout()plt.show() 五、 核心知识点全景速查表功能模块核心 API / 语法作用说明关键参数 / 示例全局设置plt.rcParams[font.sans-serif]设置中文字体防方块乱码[SimHei]黑体plt.rcParams[axes.unicode_minus]控制负号正常显示False画布与子图plt.subplots(nrows, ncols)创建网格化子图画布figsize(宽, 高),dpi100plt.tight_layout()自动优化子图内边距排版避免标题与轴标签重叠图表组件plt.title()/ax.set_title()设置图表主标题fontsize14plt.xlabel(),plt.ylabel()设置 X/Y 轴标签文字fontsize12plt.xticks(),plt.yticks()设置 X/Y 轴的显示刻度步长plt.xticks(range(0, 10, 2))plt.grid()显示背景参考网格线linestyle--,alpha0.5plt.legend()渲染各数据系列的图例locupper right经典图表plt.plot(x, y)折线图展示随时间/维度的趋势变化color,linewidth,markerplt.bar(x, height)柱状图突出不同组别的数量对比width,alphaplt.pie(x)饼状图展示多部门/类别的比例构成autopct%1.1f%%,labels
返回列表