matplotlib教程之——自定义配置文件和绘图风格(rcParams和style)

一、什么是rcParams?

我们在使用matplotliblib画图的时候经常会遇见中文或者是负号无法显示的情况,我们会添加下面两句话:

from matplotlib.pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']

mpl.rcParams['axes.unicode_minus']=False

我们都只知道这么做,很少去想一下这到底是为什么?

实际上,pylot使用rc配置文件来自定义图形的各种默认属性,称之为rc配置rc参数。通过rc参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。

在matplotlib模块载入的时候会调用rc_params,并把得到的配置字典保存到rcParams变量中:

1、配置文件在哪里?

既然是配置文件,它也是一个文件,这个文件存在于matplotlib的安装文件夹之下,比如我的在以下文件夹:

D:\ProgramData\Anaconda3\Lib\site-packages\matplotlib\mpl-data  文件名称是 matplotlibrc   这是windows系统的,Unix和Linux会不一样。

我们可以通过实用文本文件打开这个文件进行查看,发现,里面的内容都是“ 键-值 ”的形式,这也就是为什么我们可以通过

mpl.rcParams['font.sans-serif'] = ['SimHei']  这种形式加以配置了。

2、如何查看默认配置信息——可以通过matplotlib的相关属性以及方法家已操作

(1)查看默认配置的方法

        方法一:直接打开matplotlibrc文件

        方式二:print(matplotlib.rc_params())

                      print(matplotlib.rcParamsDefault)   

                      print(matplotlib.rcParams)                               #这三者是等价的

(2)设置相关的配置

       # 修改方式一

                      mpl.rcParams['lines.linewidth'] = 2

                      mpl.rcParams['lines.color'] = 'r'

       # 修改方式二

                      mpl.rc('lines', linewidth=4, color='g')

        # 恢复默认参数

                      mpl.rcdefaults()

        #从已有的文件更新

                      mpl.cr_file()

3、示例

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(0,2*np.pi)
y=np.sin(x)

matplotlib.rcParams['lines.color']='blue'  #更改划线颜色的默认设置

plt.plot(x,y,label='sin',linewidth=5)
plt.legend()
plt.show()

运行结果为:

二、什么是style

使用matplotlib画图的时候,除了我们可以针对每一个样式自己定义以外,我们还可以使用系统定义好的样式快速配置。

style是pyplot的一个子模块,方便进行风格转换,它里面定义了很多预设风格。本质上来说,每一个预设的风格style都是一个style文件,它是以  .mplstyle   为后缀的文件。我们依然可以查看,比如我的电脑在一下文件夹下,有很多的  .mplstyle文件:

D:\ProgramData\Anaconda3\Lib\site-packages\matplotlib\mpl-data\stylelib,里面的部分文件如下所示:

每一个文件名对应于一种预设风格。

我们可以打开一个文件,里面预设的风格属性也是通过“  键-值  ”对的形式表示的。

1、预设风格的查看

         方式一:直接查看相应的文件夹即可

         方式二:print(plt.style.available)   #会打印出所有的预设风格的名称

2、预设风格的使用——就添加一句话即可

                       x=np.linspace(0,2*np.pi)

                       y=np.sin(x)

                       plt.style.use('ggplot')                         ##使用 ggplot  的绘图风格

                       plt.plot(x,y,label='sin',linewidth=5)

                       plt.legend()

                       plt.show()

3、自定义画图风格style

      比如我在上面所述的文件夹下自定义一个 myownstyle.mplstyle 文件,里面的内容如下所示:

          lines.color: green
          lines.linewidth:8
          patch.edgecolor: red

          text.color: white

          axes.facecolor: yellow
          axes.edgecolor:black

   然后调用如下:

      

import matplotlib
import matplotlib.pyplot as plt
import numpy as np


x=np.linspace(0,2*np.pi)
y=np.sin(x)

f=plt.figure()
plt.style.use('myownstyle')    ##使用自定义的样式文件
plt.plot(x,y,label='sin',linewidth=5)
plt.legend()

plt.show()

运行结果为:

4、补充

除此之外,我们还可以使用with代码块。在代码块内部画的图是制定的风格,而在代码块外部画的图却不用这种风格,入戏所示:

      

x=np.linspace(0,2*np.pi)
y=np.sin(x)

f=plt.figure()
with plt.style.context('myownstyle'):   #将use换成context
    pass
plt.plot(x,y,label='sin')
plt.legend()

plt.show()

运行结果为:

由此可见,因为图是在with代码块之外画的,所以并没有使用到我的样式 myownstyle。

### 解决方案 当使用 `matplotlib` 的 `seaborn` 样式时,如果遇到 `FileNotFoundError` 错误,通常是因为 Matplotlib 尝试加载样式表文件失败。以下是可能的原因以及对应的解决方案: #### 可能原因及解决方法 1. **Matplotlib 置目录中的样式文件缺失** 如果安装过程中某些样式文件丢失或者损坏,则可能导致该问题。可以通过重新安装 Matplotlib 来修复此问题[^3]。 ```bash pip uninstall matplotlib pip install matplotlib ``` 2. **自定义路径置错误** 当前工作环境可能存在不正确的路径设置,导致无法定位到默认的样式文件位置。可以尝试手动指定样式的绝对路径来解决问题[^4]。 使用以下代码验证是否存在特定风格: ```python import matplotlib.pyplot as plt styles = plt.style.available print(styles) ``` 若列表中缺少 `'seaborn'` 或其他相关主题名称,则可能是安装过程有问题或被覆盖。此时需确认版本兼容性并更新至最新版[^5]。 3. **缓存清理不足** Python 缓存机制有时会保留旧数据影响新功能正常使用。建议清除站点包下的缓存后再重试操作[^6]: ```bash python -m pip cache purge rm -rf ~/.cache/matplotlib/ ``` 4. **操作系统权限限制** 对于部分受严格访问控制的操作系统来说(如 Windows Server 版本),即使拥有管理员身份也可能因为安全策略而阻止读取必要资源。调整相应盘符属性允许完全控制即可缓解此类状况[^7]。 --- ### 示例代码修正后的绘图实现方式 为了确保程序稳定运行,在调用之前先检查目标样式是否可用;另外提供一种替代方案——直接嵌入所需参数而不依赖外部模板完成相同效果展示如下所示: ```python import matplotlib.pyplot as plt import seaborn as sns # 判断是否有对应的主题存在 if 'seaborn' in plt.style.available: plt.style.use('seaborn') else: # 设置字体大小等基础选项模拟相近视觉感受 plt.rcParams['font.size'] = 12 plt.rcParams['axes.labelsize'] = 14 plt.rcParams['xtick.labelsize'] = 12 plt.rcParams['ytick.labelsize'] = 12 plt.figure(figsize=(8, 5)) sns.histplot([1]*10+[2]*20+[3]*30, bins=30, kde=True, color='green') plt.title('示例直方图', fontsize=16) plt.xlabel('数值范围', fontsize=14) plt.ylabel('频率计数', fontsize=14) # 添加辅助线标记零点位置 plt.axvline(x=0, color='black', linestyle='dashed') plt.show() ``` --- ### 总结 通过以上分析可知,针对 `matplolib` 中应用 `seaborn` 样式引发的找不到文件异常情况可以从多个角度入手排查处理。无论是恢复原始状态还是灵活运用内置函数都能有效规避风险达成预期成果[^8]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值