plt.rcParams
概述
plt.rcParams
是 Matplotlib 的全局配置参数字典,允许用户设置图形的各种属性,例如字体、颜色、线型等。通过修改这些参数,可以自定义图形的默认样式。
字体相关配置
font.family
:指定字体家族。font.sans-serif
:无衬线字体系列。font.serif
:衬线字体系列。font.cursive
:草书字体系列。font.fantasy
:奇幻字体系列。font.monospace
:等宽字体系列。font.size
:全局字体大小。font.style
:字体样式(‘normal’, ‘italic’, ‘oblique’)。
示例1:设置全局字体为 SimHei,并使用中文标签
import matplotlib.pyplot as plt
# 设置全局字体为 SimHei,无衬线字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 12
# 绘制示例图形
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('示例标题')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
示例2:使用不同的字体和样式(Arial 和斜体)
import matplotlib.pyplot as plt
# 设置全局字体为 Arial,无衬线字体,斜体
plt.rcParams['font.sans-serif'] = ['Arial']
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 14
plt.rcParams['font.style'] = 'italic'
# 绘制示例图形
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('示例标题(Arial 斜体)')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
示例3:使用等宽字体 Courier New
import matplotlib.pyplot as plt
# 设置全局字体为 Courier New,等宽字体
plt.rcParams['font.monospace'] = ['Courier New']
plt.rcParams['font.family'] = 'monospace'
plt.rcParams['font.size'] = 10
# 绘制示例图形
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('示例标题(Courier New)')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
示例4:混合使用不同字体系列
import matplotlib.pyplot as plt
# 设置不同字体系列
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['Times New Roman']
plt.rcParams['font.cursive'] = ['Comic Sans MS']
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 12
# 绘制示例图形
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('示例标题(使用 SimHei 字体)')
plt.xlabel('X轴(Times New Roman)', fontsize=14, fontfamily='serif')
plt.ylabel('Y轴(Comic Sans MS)', fontsize=14, fontfamily='cursive')
plt.show()
其他常用的 rcParams
配置
图像尺寸和分辨率
import matplotlib.pyplot as plt
# 设置图像尺寸和分辨率
plt.rcParams['figure.figsize'] = [10, 6] # 图像尺寸
plt.rcParams['figure.dpi'] = 100 # 分辨率
# 绘制示例图形
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('示例标题')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
线条属性
import matplotlib.pyplot as plt
# 设置线条属性
plt.rcParams['lines.linewidth'] = 2 # 线宽
plt.rcParams['lines.linestyle'] = '--' # 线型
# 绘制示例图形
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('示例标题')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
网格线配置
import matplotlib.pyplot as plt
# 设置网格线属性
plt.rcParams['grid.color'] = 'gray' # 网格线颜色
plt.rcParams['grid.linestyle'] = ':' # 网格线型
# 绘制示例图形
plt.plot([1, 2, 3], [4, 5, 6])
plt.grid(True)
plt.title('示例标题')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
综合实例
将多个配置结合在一起,绘制一个包含多个图例和网格线的图形。
import matplotlib.pyplot as plt
# 全局配置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.size'] = 12
plt.rcParams['figure.figsize'] = [8, 4]
plt.rcParams['lines.linewidth'] = 2
plt.rcParams['grid.color'] = 'gray'
plt.rcParams['grid.linestyle'] = ':'
# 绘制图形
plt.plot([1, 2, 3], [4, 5, 6], label='线条1')
plt.plot([1, 2, 3], [6, 5, 4], label='线条2')
plt.title('综合实例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.grid(True)
plt.legend()
plt.show()
注意事项和常见问题
- 如果在设置参数后图像显示没有改变,可能需要重启内核。
- 对于单个 Axes 或 Figure 对象,可以使用
set_xxxx
方法单独设置属性,它将覆盖全局的rcParams
设置。 - 某些参数只能通过
rcParams
全局设置,无法针对单个对象设置。
参数优先级
不同级别设置的同一参数,优先级从高到低为:
- 针对对象的显式设置,如
set_xxxx
方法。 - Matplotlib RC 文件(
matplotlibrc
)中的设置。 rcParams
字典中的全局设置。- Matplotlib 内部默认值。
优先级较高的设置会覆盖较低级别的设置。
查看和恢复默认值
- 使用
matplotlib.rcdefaults()
可以打印所有配置项的默认值。 - 使用
plt.rcParams.update(plt.rcParamsDefault)
可以将全部参数恢复为默认值。 - 要查看或恢复单个参数的默认值,可以使用
print(plt.rcParamsDefault['参数名'])
和plt.rcParams['参数名'] = plt.rcParamsDefault['参数名']
。
实际应用场景
自定义 Matplotlib 图形风格的常见场景包括:
- 期刊/会议要求:为了满足不同期刊或会议的投稿要求,需要将图形样式设置为特定风格。
- 企业 VI 风格:在企业内部报告或宣传材料中,需要使用符合公司 VI 规范的统一图形风格。
- 个人风格偏好:根据个人审美偏好和习惯,自定义图形的外观细节。
- 实现主题一致性:在同一份报告或演示文稿中,让所有图形的样式保持一致。
- 适配特殊需求:如适配某些特殊群体(如色盲人士)的观看需求等。
其他资源
- Matplotlib 官方文档中的 Configuration tutorial 详细介绍了 rcParams 的使用方法。
- Matplotlib 画廊的 样式库 展示了不同内置样式的效果。
- 设置Matplotlibrc文件可在启动时加载配置。
- Matplotlib 还提供了一些用于自定义样式的 API,如
matplotlib.style
模块等,感兴趣可自行了解。
通过对 rcParams
的合理配置,可以充分发挥 Matplotlib 这一强大的可视化工具的潜力,为数据分析的结果设计出专业、精美、个性化的图形展示效果。
好的,下面继续对这篇博文进行扩展和补充:
进阶技巧
除了直接修改 rcParams
的参数值外,Matplotlib 还提供了一些进阶的自定义方式:
样式表
可以将一组预设的参数值保存为一个"样式表"文件,在需要时快速加载应用。样式表使用 JSON 格式定义,例如:
{
"xtick.major.size": 3,
"lines.linewidth": 2,
"figure.figsize": [6, 4]
}
保存为 custom.mplstyle
文件后,可以在代码中使用 plt.style.use('custom')
加载该样式表。
上下文管理器
matplotlib.style
模块提供了 context
上下文管理器,允许临时设置样式参数,并在退出上下文时自动恢复原样式:
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.plot([1, 2, 3], [1, 2, 1])
# 上下文管理器方式设置参数
with mpl.style.context({'xtick.major.size': 5, 'lines.linewidth': 2}):
plt.plot([1, 2, 3], [3, 2, 1])
plt.show()
OOP 风格
除了使用 pyplot 的函数接口,Matplotlib 也支持面向对象的编程风格,通过显式创建 Figure 和 Axes 对象来进行更细粒度的控制。每个对象都有相应的设置方法,如 Figure.set_dpi()
等。
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(5, 3), dpi=100)
lines = ax.plot([1, 2, 3], [1, 2, 1])
ax.set_title("OOP 风格设置样式", fontsize=14)
ax.set_xlabel("X")
ax.set_ylabel("Y")
# 修改线条属性
line = lines[0]
line.set_linewidth(3)
line.set_color('r')
plt.show()
自定义字体文件
有时系统默认的字体不能满足需求,我们可以自定义使用本地的字体文件。首先将字体文件(如 .ttf 或 .otf 格式)复制到某个路径下,然后使用 matplotlib.font_manager
模块去加载该字体。
import matplotlib.font_manager as fm
# 加载自定义字体文件
font_path = "/path/to/font/file/CustomFont.ttf"
prop = fm.FontProperties(fname=font_path)
# 使用自定义字体
plt.subplot(111, label=f"使用自定义字体: {fm.findfont(prop)['name']}")
参数配置的最佳实践
虽然 rcParams
提供了全局控制样式的便利,但直接硬编码参数值在大型项目中难以维护。一些推荐的最佳实践包括:
- 使用样式表或
mpl.style.use
加载预设样式。 - 将样式相关的代码封装为一个函数或上下文管理器。
- 将不同的图形类型、数据格式等分开设置,避免相互影响。
- 对于可视化报告,考虑使用模板渲染的方式动态生成。
通过合理的设计和封装,可以实现样式的一致性、可维护性和灵活性。