为什么选择matplotlib
Python可视化库很多:Seaborn、Plotly、Pyecharts。但matplotlib是根基——其他库大多基于它封装。掌握matplotlib后,你不仅能画出任何想要的图表,还能理解其他库的内部逻辑。而且matplotlib完全免费,文档丰富,社区庞大。
第一步:安装与基础配置
安装:pip install matplotlib。通常配合numpy和pandas一起用:pip install numpy pandas。
基础导入:
import matplotlib.pyplot as plt
import numpy as np
中文显示配置(解决中文乱码):
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.rcParams[‘axes.unicode_minus’] = False
第二步:绘制基础图表
折线图
x = [1, 2, 3, 4, 5]
y = [10, 15, 7, 12, 20]
plt.plot(x, y, marker=’o’, linestyle=’–‘, color=’blue’)
plt.title(‘月度销售额’)
plt.xlabel(‘月份’)
plt.ylabel(‘销售额(万元)’)
plt.grid(True)
plt.show()
柱状图
categories = [‘A’, ‘B’, ‘C’, ‘D’]
values = [25, 40, 30, 55]
plt.bar(categories, values, color=[‘red’, ‘green’, ‘blue’, ‘orange’])
plt.title(‘各区域业绩对比’)
for i, v in enumerate(values):
plt.text(i, v + 1, str(v), ha=’center’)
plt.show()
饼图
sizes = [30, 25, 20, 15, 10]
labels = [‘产品A’, ‘产品B’, ‘产品C’, ‘产品D’, ‘其他’]
plt.pie(sizes, labels=labels, autopct=’%1.1f%%’, startangle=90)
plt.title(‘产品销售占比’)
plt.show()
第三步:图表美化技巧
默认图表比较朴素,通过以下技巧提升专业度:
- 配色——不要用默认颜色,用专业配色方案(如Tableau配色、企业品牌色)
- 标题——主标题说明内容,副标题补充背景
- 注释——在关键数据点加注释说明原因
- 图例——位置放在图表外或右上角,不要遮挡数据
- 网格线——浅灰色虚线网格,辅助读数但不抢眼
美化示例:
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, y, color=’#2E86AB’, linewidth=2.5)
ax.fill_between(x, y, alpha=0.3, color=’#2E86AB’)
ax.set_title(‘2026年Q3销售趋势’, fontsize=16, fontweight=’bold’)
ax.set_xlabel(‘月份’, fontsize=12)
ax.set_ylabel(‘销售额(万元)’, fontsize=12)
ax.grid(True, linestyle=’–‘, alpha=0.7)
ax.spines[‘top’].set_visible(False)
ax.spines[‘right’].set_visible(False)
plt.tight_layout()
plt.show()
第四步:多子图布局
一个画布放多个图表:
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
axes[0, 0].plot(x, y1)
axes[0, 0].set_title(‘销售额’)
axes[0, 1].bar(categories, values)
axes[0, 1].set_title(‘区域对比’)
axes[1, 0].pie(sizes, labels=labels)
axes[1, 0].set_title(‘占比’)
axes[1, 1].scatter(x, y2)
axes[1, 1].set_title(‘相关性’)
plt.tight_layout()
plt.show()
subplots(2, 2)创建2行2列的画布,axes数组访问每个子图。tight_layout()自动调整间距,避免重叠。
第五步:结合pandas快速绘图
有DataFrame时,pandas内置plot方法直接调用matplotlib:
import pandas as pd
df = pd.DataFrame({‘月份’: [‘1月’, ‘2月’, ‘3月’], ‘销售额’: [100, 150, 120]})
df.plot(x=’月份’, y=’销售额’, kind=’bar’, figsize=(8, 5), title=’月度销售’)
plt.show()
kind参数可选:line(折线)、bar(柱状)、barh(横向柱状)、pie(饼图)、scatter(散点)、hist(直方图)。
常见问题与误区
- 中文乱码——配置plt.rcParams字体,或保存时用指定字体
- 图表保存模糊——用plt.savefig(‘chart.png’, dpi=300, bbox_inches=’tight’)
- 多子图重叠——调用tight_layout()或手动调整subplots_adjust
- 颜色太多分不清——同类数据用同色系,对比数据用互补色,不要超过7种颜色
效率数据
实测:用Excel做一张带多系列的折线图约5分钟,用matplotlib约3分钟写代码,但代码可以复用——数据更新后重新运行即可。10张图表的日报,Excel手动做约1小时,matplotlib脚本约10分钟(含运行)。更重要的是matplotlib可以自动化——设置定时任务,每天自动拉数据、生成图表、发送邮件。核心建议是:一次性图表用Excel更快,重复性图表用matplotlib脚本更值得投入。