当前位置:首页>python>Python零基础入门(十九):Matplotlib的使用

Python零基础入门(十九):Matplotlib的使用

  • 2026-09-14 22:49:44
Python零基础入门(十九):Matplotlib的使用

Matplotlib入门:5分钟学会Python画图,告别Excel图表

上次领导让我做一个数据汇报,我用 Excel 做了一堆图表。

领导看完说:「这图太丑了,能不能专业一点?」

我花了一晚上用 Matplotlib 重做,第二天领导看了问:「这是用什么工具做的?」

Python,10 行代码。


为什么用 Matplotlib?

Python 画图的库有好几个,我直接说结论:

  • • Matplotlib:最基础、最灵活、什么图都能画。缺点是默认样式丑,需要调参数
  • • Seaborn:基于 Matplotlib,默认样式好看,适合统计图表
  • • Plotly:交互式图表,适合网页展示

新手先学 Matplotlib,其他库都是基于它封装的。

安装:

pip install matplotlib

导入习惯用别名:

import matplotlib.pyplot as plt

折线图:最常用的图表

展示数据趋势,比如股价、温度变化:

import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5, 6, 7]y = [10, 15, 13, 18, 22, 20, 25]plt.plot(x, y, marker='o', linewidth=2, color='#1f77b4')plt.title('一周销售趋势')plt.xlabel('日期')plt.ylabel('销售额(万)')plt.grid(True, alpha=0.3)plt.show()

marker='o' 是数据点标记,linewidth 是线宽,alpha 是透明度。


柱状图:对比数据

对比不同类别的数据:

categories = ['北京', '上海', '广州', '深圳', '杭州']values = [120, 100, 80, 90, 70]plt.bar(categories, values, color=['#2ecc71', '#3498db', '#e74c3c', '#f39c12', '#9b59b6'])plt.title('各城市销售额')plt.xlabel('城市')plt.ylabel('销售额(万)')plt.show()

水平柱状图:

plt.barh(categories, values)plt.title('各城市销售额')plt.show()

饼图:展示占比

展示各部分占总体的比例:

labels = ['直接访问', '搜索引擎', '社交媒体', '广告']sizes = [30, 40, 20, 10]explode = (0, 0.1, 0, 0)  # 突出显示搜索引擎plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',        shadow=True, startangle=90)plt.title('流量来源分布')plt.show()

autopct='%1.1f%%' 显示百分比,explode 是突出某一块,shadow 是阴影效果。


散点图:展示相关性

展示两个变量之间的关系:

import numpy as npx = np.random.randn(100)y = x * 2 + np.random.randn(100) * 0.5plt.scatter(x, y, alpha=0.6, c='#e74c3c', edgecolors='white', s=50)plt.title('散点图示例')plt.xlabel('X')plt.ylabel('Y')plt.show()

alpha 是透明度,s 是点的大小,edgecolors 是边框颜色。


子图:一个画布多张图

在一个画布上画多张图:

fig, axes = plt.subplots(2, 2, figsize=(10, 8))# 第一个子图axes[0, 0].plot([1, 2, 3], [1, 4, 9])axes[0, 0].set_title('折线图')# 第二个子图axes[0, 1].bar(['A', 'B', 'C'], [3, 7, 5])axes[0, 1].set_title('柱状图')# 第三个子图axes[1, 0].scatter([1, 2, 3], [3, 1, 5])axes[1, 0].set_title('散点图')# 第四个子图axes[1, 1].pie([30, 40, 30], labels=['X', 'Y', 'Z'])axes[1, 1].set_title('饼图')plt.tight_layout()plt.show()

figsize 是画布大小,tight_layout 自动调整间距避免重叠。


样式美化:让图表更专业

Matplotlib 默认样式确实丑,但可以调整:

# 使用内置样式plt.style.use('seaborn-v0_8')# 或者自定义样式plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文plt.rcParams['axes.unicode_minus'] = False     # 显示负号plt.rcParams['figure.dpi'] = 100               # 分辨率

常用内置样式:seaborn-v0_8、ggplot、fivethirtyeight、dark_background


保存图表

保存为图片文件:

plt.savefig('chart.png', dpi=300, bbox_inches='tight')

dpi 是分辨率,bbox_inches='tight' 去掉多余空白。支持 PNG、PDF、SVG 格式。


完整实战:销售数据可视化

一个完整的例子:

import matplotlib.pyplot as pltimport pandas as pd# 准备数据months = ['1月', '2月', '3月', '4月', '5月', '6月']sales_a = [120, 135, 148, 160, 155, 170]sales_b = [90, 100, 110, 105, 115, 125]# 创建画布fig, ax = plt.subplots(figsize=(10, 6))# 画两条折线ax.plot(months, sales_a, marker='o', label='产品A', linewidth=2)ax.plot(months, sales_b, marker='s', label='产品B', linewidth=2)# 设置标题和标签ax.set_title('上半年销售趋势对比', fontsize=16)ax.set_xlabel('月份')ax.set_ylabel('销售额(万)')ax.legend()ax.grid(True, alpha=0.3)plt.tight_layout()plt.savefig('sales_report.png', dpi=300)plt.show()

写在最后

Matplotlib 的 API 很多,但掌握了折线图、柱状图、饼图、散点图、子图这五个核心,90% 的需求都能搞定。

建议收藏官方示例库:https://matplotlib.org/stable/gallery/index/

最新文章

随机文章