news 2026/4/21 17:12:39

别再死记硬背了!用Python Matplotlib画折线图、散点图、饼图的保姆级代码模板(附避坑点)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再死记硬背了!用Python Matplotlib画折线图、散点图、饼图的保姆级代码模板(附避坑点)

Python数据可视化实战:Matplotlib黄金代码模板与避坑指南

当你需要在周报中快速插入一张销售趋势折线图,或是为实验数据生成直观的散点分布时,Matplotlib往往是Python用户的首选工具。但面对繁杂的API文档和容易踩坑的参数设置,很多开发者会陷入反复调试的困境。本文将提供五种最常用图表的即用型代码模板,每个模板都经过实战检验,并标注了新手最容易出错的配置项。

1. 折线图:趋势展示的基石

折线图是展示时间序列或连续数据变化的标配。下面这个模板解决了三个常见痛点:中文显示异常、图像尺寸失控和线条样式单调。

import matplotlib.pyplot as plt import numpy as np # 解决中文显示问题 plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows系统 plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题 # 生成示例数据 x = np.linspace(0, 10, 100) y = np.sin(x) # 黄金模板 fig, ax = plt.subplots(figsize=(8, 5)) # 单位是英寸 ax.plot(x, y, color='#3498db', # 十六进制颜色码 linestyle='--', # 虚线样式 linewidth=2, # 线宽 marker='o', # 数据点标记 markersize=5, # 标记大小 label='正弦曲线') # 关键配置项 ax.set_title('月度销售额趋势', fontsize=14) ax.set_xlabel('日期', fontsize=12) ax.set_ylabel('销售额(万元)', fontsize=12) ax.grid(True, linestyle=':', alpha=0.7) # 网格线 ax.legend(loc='upper right') # 图例位置 plt.tight_layout() # 防止标签重叠 plt.savefig('line_chart.png', dpi=300, bbox_inches='tight') # 保存高清图 plt.show()

避坑提示:figsize参数的单位是英寸而非像素,8×5的尺寸适合大多数报告。bbox_inches='tight'能自动裁剪白边,避免保存时内容被截断。

2. 散点图:揭示数据关系的利器

散点图在分析变量间相关性时不可或缺。这个模板解决了气泡图大小控制、颜色映射和透明度设置的难题。

# 生成模拟数据 np.random.seed(42) x = np.random.randn(100) y = x * 2 + np.random.randn(100) * 0.5 sizes = np.abs(np.random.randn(100)) * 100 # 气泡大小 colors = np.random.rand(100) # 颜色映射值 # 专业级散点图模板 fig, ax = plt.subplots(figsize=(8, 6)) scatter = ax.scatter( x, y, s=sizes, # 点的大小 c=colors, # 颜色值 cmap='viridis', # 色谱方案 alpha=0.7, # 透明度 edgecolors='w', # 边缘颜色 linewidths=0.5 # 边缘线宽 ) # 高级配置 ax.set_title('用户年龄与消费金额关系', pad=20) ax.set_xlabel('年龄', labelpad=10) ax.set_ylabel('月均消费(元)', labelpad=10) # 添加颜色条 cbar = fig.colorbar(scatter) cbar.set_label('消费频次', rotation=270, labelpad=15) # 添加趋势线 z = np.polyfit(x, y, 1) p = np.poly1d(z) ax.plot(x, p(x), "r--", lw=1.5) plt.tight_layout() plt.savefig('scatter_plot.png', dpi=300) plt.show()

常见问题解决方案

  • 点太小看不清?调整s参数,建议值50-200
  • 颜色区分不明显?更换cmap为'plasma'或'magma'
  • 点重叠严重?设置alpha=0.5以下增加透明度

3. 饼图:比例展示的专业之道

饼图虽然简单,但要做到专业需要处理五个细节:百分比显示、区块突出、颜色搭配、标签防重叠和起始角度。

# 示例数据 labels = ['电子产品', '服装', '食品', '家居', '图书'] sizes = [15, 30, 45, 5, 5] explode = (0, 0.1, 0, 0, 0) # 突出显示第二区块 colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99','#c2c2f0'] # 防呆模板 fig, ax = plt.subplots(figsize=(6, 6)) wedges, texts, autotexts = ax.pie( sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90, # 起始角度 counterclock=False, # 顺时针方向 wedgeprops={'linewidth': 1, 'edgecolor': 'white'}, # 区块边框 textprops={'fontsize': 10} ) # 美化百分比标签 for autotext in autotexts: autotext.set_color('white') autotext.set_weight('bold') # 添加中心空白实现甜甜圈效果 centre_circle = plt.Circle((0,0), 0.7, fc='white') fig.gca().add_artist(centre_circle) ax.set_title('季度销售额构成', y=1.05) plt.savefig('pie_chart.png', dpi=300, transparent=True) # 透明背景 plt.show()

专业建议:当类别超过5个时,考虑将小比例合并为"其他"项。使用transparent=True保存的PNG图片能完美融入各种背景的PPT。

4. 组合图表:多维信息呈现

将不同图表类型组合在同一画布上,可以同时展示多个维度的信息。这个模板演示了如何创建带有折线图、柱状图和次坐标轴的复合图表。

# 准备数据 months = ['1月', '2月', '3月', '4月', '5月', '6月'] sales = [23, 45, 56, 78, 55, 60] customers = [120, 240, 300, 450, 320, 400] conversion = [19.2, 18.8, 18.7, 17.3, 17.2, 15.0] # 创建画布和主坐标轴 fig, ax1 = plt.subplots(figsize=(10, 6)) # 柱状图(主Y轴) bars = ax1.bar( months, customers, color='#3498db', alpha=0.7, label='客流量' ) ax1.set_ylabel('客流量(人)', fontsize=12) ax1.tick_params(axis='y') # 折线图(次Y轴) ax2 = ax1.twinx() line = ax2.plot( months, sales, color='#e74c3c', marker='o', linewidth=2, label='销售额' ) ax2.set_ylabel('销售额(万元)', fontsize=12) # 第三个坐标轴(共享X轴) ax3 = ax1.twinx() ax3.spines['right'].set_position(('outward', 60)) # 偏移第三个Y轴 line2 = ax3.plot( months, conversion, color='#2ecc71', linestyle=':', marker='s', linewidth=2, label='转化率(%)' ) ax3.set_ylabel('转化率(%)', fontsize=12) # 合并图例 lines = line + line2 labels = [l.get_label() for l in lines] ax1.legend(bars + lines, ['客流量'] + labels, loc='upper left', framealpha=0.9) plt.title('上半年销售业绩分析', pad=20) fig.tight_layout() plt.savefig('combo_chart.png', dpi=300) plt.show()

多图组合技巧

  • 使用twinx()创建共享X轴的新Y轴
  • 不同图表使用对比明显的颜色
  • 次坐标轴的位置可通过spines['right'].set_position调整
  • 合并图例时注意顺序对应

5. 高级样式配置:从能用变好用

让图表达到出版级质量需要关注以下细节配置,这个模板封装了最常见的样式优化技巧。

# 创建专业级样式配置 plt.style.use('seaborn') # 使用seaborn风格 # 示例数据 x = np.arange(1, 6) y1 = np.array([10, 20, 15, 25, 30]) y2 = np.array([5, 15, 10, 20, 25]) # 初始化画布 fig, ax = plt.subplots(figsize=(9, 6)) # 绘制堆叠柱状图 bars1 = ax.bar(x, y1, color='#3498db', edgecolor='white', linewidth=1, label='产品A') bars2 = ax.bar(x, y2, bottom=y1, color='#e74c3c', edgecolor='white', linewidth=1, label='产品B') # 高级文本标注 for rect in bars1 + bars2: height = rect.get_height() bottom = rect.get_y() total_height = height + bottom ax.text(rect.get_x() + rect.get_width()/2., total_height/2, f'{int(height)}', ha='center', va='center', color='white', fontsize=10, fontweight='bold') # 坐标轴美化 ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['left'].set_color('#95a5a6') ax.spines['bottom'].set_color('#95a5a6') # 网格线配置 ax.grid(axis='y', linestyle='--', alpha=0.4, color='#7f8c8d') # 标题和标签 ax.set_title('产品销售额对比分析', pad=20, fontsize=14, fontweight='bold') ax.set_xlabel('季度', labelpad=10, fontsize=12) ax.set_ylabel('销售额(万元)', labelpad=10, fontsize=12) # 刻度调整 ax.set_xticks(x) ax.set_xticklabels(['Q1', 'Q2', 'Q3', 'Q4', 'Q5']) ax.tick_params(axis='both', which='both', length=0) # 图例位置优化 ax.legend(frameon=True, loc='upper left', bbox_to_anchor=(1, 1)) plt.tight_layout() plt.savefig('professional_chart.png', dpi=300, quality=95, optimize=True) plt.show()

样式优化关键点

  • 使用plt.style.use()选择内置样式
  • 通过spines控制边框显示
  • 网格线使用浅色和透明度
  • 文本标注精确控制位置和样式
  • 保存时设置qualityoptimize参数平衡文件大小和质量
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 23:43:39

AGI招聘不是找人,是构建认知接口:2026奇点大会披露的“人机协同适配度”三级评估协议(含开源验证脚本)

第一章:2026奇点智能技术大会:AGI与人才招聘 2026奇点智能技术大会(https://ml-summit.org) AGI驱动的招聘范式迁移 传统招聘流程正被具备推理、上下文理解与多模态评估能力的AGI系统重构。在大会现场,多家头部科技企业演示了基于自主代理&…

作者头像 李华
网站建设 2026/4/19 16:07:26

G-Helper终极指南:免费开源华硕笔记本控制神器

G-Helper终极指南:免费开源华硕笔记本控制神器 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, and…

作者头像 李华
网站建设 2026/4/21 4:17:57

2025届学术党必备的五大降重复率神器推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 使知网AI检测率降低之核心要点在于把文本里机械生成的特征给消除掉。给出这样的建议&#xf…

作者头像 李华
网站建设 2026/4/21 4:17:48

RS-485差分信号传输与抗干扰设计全解析

1. RS-485差分信号传输的核心原理 第一次接触RS-485时,我被它的抗干扰能力震惊了。当时在工厂里做设备调试,周围全是变频器和大型电机,各种电磁干扰特别强,但485线路上的数据就是稳稳当当。后来拆解分析才发现,这都要归…

作者头像 李华