006、全局配置参数字典plt.rcParams

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 全局设置,无法针对单个对象设置。

参数优先级

不同级别设置的同一参数,优先级从高到低为:

  1. 针对对象的显式设置,如 set_xxxx 方法。
  2. Matplotlib RC 文件(matplotlibrc)中的设置。
  3. rcParams 字典中的全局设置。
  4. Matplotlib 内部默认值。

优先级较高的设置会覆盖较低级别的设置。

查看和恢复默认值

  • 使用 matplotlib.rcdefaults() 可以打印所有配置项的默认值。
  • 使用 plt.rcParams.update(plt.rcParamsDefault) 可以将全部参数恢复为默认值。
  • 要查看或恢复单个参数的默认值,可以使用 print(plt.rcParamsDefault['参数名'])plt.rcParams['参数名'] = plt.rcParamsDefault['参数名']

实际应用场景

自定义 Matplotlib 图形风格的常见场景包括:

  1. 期刊/会议要求:为了满足不同期刊或会议的投稿要求,需要将图形样式设置为特定风格。
  2. 企业 VI 风格:在企业内部报告或宣传材料中,需要使用符合公司 VI 规范的统一图形风格。
  3. 个人风格偏好:根据个人审美偏好和习惯,自定义图形的外观细节。
  4. 实现主题一致性:在同一份报告或演示文稿中,让所有图形的样式保持一致。
  5. 适配特殊需求:如适配某些特殊群体(如色盲人士)的观看需求等。

其他资源

  • 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 提供了全局控制样式的便利,但直接硬编码参数值在大型项目中难以维护。一些推荐的最佳实践包括:

  1. 使用样式表或 mpl.style.use 加载预设样式。
  2. 将样式相关的代码封装为一个函数或上下文管理器。
  3. 将不同的图形类型、数据格式等分开设置,避免相互影响。
  4. 对于可视化报告,考虑使用模板渲染的方式动态生成。

通过合理的设计和封装,可以实现样式的一致性、可维护性和灵活性。

相关推荐

  1. 006全局配置参数字典plt.rcParams

    2024-06-18 10:30:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 10:30:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 10:30:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 10:30:01       82 阅读
  4. Python语言-面向对象

    2024-06-18 10:30:01       91 阅读

热门阅读

  1. SpringTask定时任务框架

    2024-06-18 10:30:01       58 阅读
  2. 考研计算机网络(第一章 概述)

    2024-06-18 10:30:01       35 阅读
  3. Babelfish for PostgreSQL

    2024-06-18 10:30:01       36 阅读
  4. CCAA认证人员考试各科涉及法律法规汇总

    2024-06-18 10:30:01       34 阅读
  5. PHP框架有哪些,以及具体对比优缺点

    2024-06-18 10:30:01       37 阅读
  6. 数据仓库之Kappa架构

    2024-06-18 10:30:01       31 阅读