当前位置:首页>python>【零基础玩转Python】Day48:图形定制 – 标题、标签、图例、网格、颜色,让你的图表脱颖而出

【零基础玩转Python】Day48:图形定制 – 标题、标签、图例、网格、颜色,让你的图表脱颖而出

  • 2026-10-11 06:43:57
【零基础玩转Python】Day48:图形定制 – 标题、标签、图例、网格、颜色,让你的图表脱颖而出

【零基础玩转Python】Day48:图形定制 – 标题、标签、图例、网格、颜色,让你的图表脱颖而出

大家好,我是[知识充电宝的灵感日记]。

昨天我们学习了 Matplotlib 的基本图表绘制。但默认的图表往往比较简陋——缺少标题、坐标轴标签不清晰、颜色单调。今天我们来学习如何定制图表,包括标题、轴标签、图例、网格、颜色等细节,让你的图表更加专业、易读。

今天的目标:

  • ✅ 设置标题和轴标签(title, xlabel, ylabel)
  • ✅ 添加图例(legend)并控制位置
  • ✅ 添加网格线(grid)
  • ✅ 自定义颜色和样式
  • ✅ 设置坐标轴范围(xlim, ylim)
  • ✅ 添加文本标注(text, annotate)
  • ✅ 保存图片(savefig)
  • ✅ 全局参数配置(rcParams)

难度:⭐⭐(参数多,但掌握后能做出漂亮图表)

一、准备工作

import matplotlib.pyplot as plt
import numpy as np

# 支持中文(解决乱码问题)
plt.rcParams['font.sans-serif'] = ['Heiti TC', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False# 解决负号显示问题

二、标题与轴标签

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.title('正弦函数曲线', fontsize=16, fontweight='bold')   # 标题
plt.xlabel('x 值', fontsize=12)
plt.ylabel('sin(x)', fontsize=12)
plt.show()

参数说明:

  • fontsize:字体大小
  • fontweight:粗细 ('normal', 'bold')
  • loc:标题位置 ('center', 'left', 'right')

三、图例(Legend)

当图表中有多条线时,图例用来区分。

x = np.linspace(0, 5, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.legend()   # 自动显示图例
plt.show()

图例位置控制:

plt.legend(loc='upper left')   # 位置:best, upper right, lower center 等
plt.legend(loc='upper right', fontsize=10, frameon=True, shadow=True)  # 边框、阴影

不自动显示图例:手动添加图例句柄:

line1, = plt.plot(x, y1)
line2, = plt.plot(x, y2)
plt.legend([line1, line2], ['正弦', '余弦'])

四、网格(Grid)

网格线有助于更精确地读取数据点。

plt.plot(x, y1)
plt.grid(True)   # 显示网格
# 更细的控制
plt.grid(True, linestyle='--', alpha=0.7, color='gray')

  • linestyle:'-', '--', '-.', ':'
  • alpha:透明度 0~1
  • axis:'both'(默认), 'x', 'y'

五、颜色与样式自定义

1. 颜色表示方式

# 常用颜色
plt.plot(x, y1, color='red')          # 颜色名称
plt.plot(x, y1, color='
#FF5733')      # 十六进制
plt.plot(x, y1, color=(0.2, 0.4, 0.6)) # RGB 元组 (0~1)
plt.plot(x, y1, color='k')            # 缩写:b,g,r,c,m,y,k,w

2. 线条样式与标记

plt.plot(x, y1, linestyle='-', linewidth=2, marker='o', markersize=4)
# 简写: 'r--' 表示红色虚线, 'go' 表示绿色圆点
plt.plot(x, y1, 'r--')      # 红色虚线
plt.plot(x, y1, 'gs')       # 绿色方块

3. 设置透明度

plt.plot(x, y1, alpha=0.5)

六、坐标轴范围

plt.xlim(0, 10)    # x 轴范围 [0,10]
plt.ylim(-1.5, 1.5)
# 或
plt.axis([0, 10, -1.5, 1.5])  # [xmin, xmax, ymin, ymax]

七、文本标注

1. text():在指定坐标添加文字

plt.plot(x, y1)
plt.text(4, 0, '正弦波', fontsize=12, ha='center', va='bottom')
# ha: 水平对齐 (center, left, right)
# va: 垂直对齐 (top, bottom, center)

2. annotate():带箭头的标注
plt.plot(x, y1)
plt.annotate('最大值', xy=(np.pi/2, 1), xytext=(1.0, 0.6),
             arrowprops=dict(facecolor='black', shrink=0.05))

  • xy:被标注的点坐标
  • xytext:文字位置
  • arrowprops:箭头属性

八、保存图片

plt.savefig('my_plot.png', dpi=300, bbox_inches='tight')
  • dpi:分辨率(默认100)
  • bbox_inches='tight':自动裁剪白边
  • 支持格式:png, jpg, pdf, svg

注意:savefig应在 show()之前调用,否则可能保存空白图。

九、全局参数配置(rcParams)

一次性设置所有图表的默认样式。

plt.rcParams['figure.figsize'] = (10, 6)       # 默认图片尺寸
plt.rcParams['lines.linewidth'] = 2# 线宽
plt.rcParams['lines.markersize'] = 6# 标记大小
plt.rcParams['axes.grid'] = True# 默认显示网格

也可以使用样式表:

plt.style.use('ggplot')   # 可选:'seaborn', 'classic', 'dark_background'

十、实战小案例:定制一张专业图表

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['Heiti TC', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 数据
months = ['1月', '2月', '3月', '4月', '5月']
sales = [120, 135, 150, 170, 190]
costs = [80, 85, 95, 105, 115]

# 创建画布
plt.figure(figsize=(10, 6))

# 绘制折线图
plt.plot(months, sales, 'b-o', linewidth=2, markersize=8, label='销售额')
plt.plot(months, costs, 'r--s', linewidth=2, markersize=8, label='成本')

# 标题与标签
plt.title('2025年上半年销售趋势', fontsize=16, fontweight='bold', pad=15)
plt.xlabel('月份', fontsize=12)
plt.ylabel('金额(万元)', fontsize=12)

# 图例
plt.legend(loc='upper left', fontsize=11, frameon=True, shadow=True)

# 网格
plt.grid(True, linestyle='--', alpha=0.6)

# 标注利润最大月份
profits = [s - c for s, c inzip(sales, costs)]
max_profit_month = months[profits.index(max(profits))]
max_profit = max(profits)
plt.annotate(f'最高利润: {max_profit}万', 
             xy=(max_profit_month, sales[profits.index(max(profits))]), 
             xytext=(3.2, 150),
             arrowprops=dict(facecolor='black', arrowstyle='->'))

# 保存图片
plt.savefig('sales_report.png', dpi=300, bbox_inches='tight')
plt.show()

十一、今日练习

  1. 绘制函数 在 区间上的曲线,设置标题为「平方函数」、x轴标签为「x」、y轴标签为「y」,开启网格线,线条样式为蓝色虚线、线宽设为 2。
  2. 随机生成两组数据并绘制散点图,添加图例,限定坐标轴范围:,。
  3. 创建一个 3×3 子图布局(后续章节详解,本节简单实现即可),在其中一个子图内使用 annotate完成点位标注。
  4. (挑战)从泰坦尼克数据集中提取年龄和票价字段绘制散点图,添加标题、坐标轴标签与网格;按生存状态区分颜色(存活:绿色,未存活:红色),并补充图例。

十二、常见错误与提示

  • 中文乱码:务必配置 rcParams['font.sans-serif']并关闭负号显示问题 axes.unicode_minus。
  • 图例不显示:检查绘图语句中是否正常设置 label参数。
  • savefig保存图片为空白:将 savefig()调用放在 plt.show()之前。
  • 颜色显示偏淡:检查透明度参数 alpha是否设置过低。
  • 坐标轴自动缩放:使用 plt.axis()手动固定坐标轴范围。

十三、明日预告

Day49:子图与布局 – subplot, axes, 多图排列

我们将学习如何在同一张画布中绘制多个子图,以及各类灵活的布局控制方式。

最新文章

随机文章