泉缘泉 发表于 2023-9-15 23:43:43

【matplotlib基础】--绘图配置

Matplotlib 提供了大量配置参数,
这些参数可以但不限于让我们从整体上调整通过 Matplotlib 绘制的图形样式,
这里面的参数还有很多是功能性的,和其他工具结合时需要用的配置。
通过plt.rcParams,可以查看所有的配置信息:
import matplotlib.pyplot as plt

print(len(plt.rcParams))
#运行结果
312总共居然有312个配置选项。
一一介绍所有的选项意义不大,具体可参考官方文档:
https://matplotlib.org/stable/api/matplotlib_configuration_api.html#matplotlib.rcParams
本篇只是抛砖引玉,介绍几个常用的参数,目的是了解参数的使用方法和产生的效果。
1. 坐标轴

首先是坐标轴相关的配置,通过下面的代码可以看看有多个关于坐标轴的配置:
import matplotlib.pyplot as plt

count = 1
for key, val in plt.rcParams.items():
    #只打印以 axes 开头的配置
    if key.startswith("axes"):
      print(key, " = ", val)
      count += 1

#相关的配置有 38 个
print(f"axes 相关设置有: {count} 个")一共有38个关于坐标轴的配置。
挑选一些配置,看看修改前后的效果:
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.rcParams.update(plt.rcParamsDefault)
fig = plt.figure()
ax = fig.add_axes()
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend()
plt.show()https://cdn.nlark.com/yuque/0/2023/png/2235414/1687006897107-4b69f81f-a596-4cff-84bc-fccaa0b93d92.png#averageHue=%23fbfaf9&clientId=u180e4a2b-a937-4&from=paste&height=342&id=ud71a4e92&originHeight=427&originWidth=584&originalType=binary&ratio=1.25&rotation=0&showTitle=true&size=36347&status=done&style=stroke&taskId=uee0fdee8-5644-48b6-85a4-cf476284dda&title=%E4%BF%AE%E6%94%B9%E5%89%8D%E7%9A%84%E9%BB%98%E8%AE%A4%E6%A0%B7%E5%BC%8F&width=467.2
修改了背景色,边框和网格:
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.rcParams.update(plt.rcParamsDefault)
plt.rc("axes", facecolor="#FFE4C4", edgecolor="#A52A2A", grid=True)

fig = plt.figure()
ax = fig.add_axes()
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend()
plt.show()https://cdn.nlark.com/yuque/0/2023/png/2235414/1687006990006-1b8b0fbb-0b77-490f-983d-6c760e2841e4.png#averageHue=%23fae4cb&clientId=u180e4a2b-a937-4&from=paste&height=342&id=ub7b7752c&originHeight=427&originWidth=584&originalType=binary&ratio=1.25&rotation=0&showTitle=true&size=38275&status=done&style=stroke&taskId=u639e2db8-72ea-4da3-96af-eb50bb8f052&title=%E4%BF%AE%E6%94%B9%E4%B9%8B%E5%90%8E%E7%9A%84%E6%95%88%E6%9E%9C&width=467.2
2. 网格

关于网格,除了通过坐标轴来设置,它还有自己的一些专门的设置选项:
count = 1
for key, val in plt.rcParams.items():
    if key.startswith("grid"):
      print(key, " = ", val)
      count += 1

print(f"grid 相关设置有: {count} 个")https://cdn.nlark.com/yuque/0/2023/png/2235414/1687008125435-d0543dda-4aa2-407b-a52f-a1709f4c6bc5.png#averageHue=%23e3e6eb&clientId=u180e4a2b-a937-4&from=paste&height=126&id=u81d23080&originHeight=157&originWidth=338&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=16356&status=done&style=stroke&taskId=ua3ff8036-2a5a-4386-a3b5-ffb326ef56f&title=&width=270.4
总共有5个相关的配置,设置看看效果。
代码和上面类似,这里只把设置部分的代码列出来。
plt.rcParams.update(plt.rcParamsDefault)
plt.rc("axes", grid=True)
plt.rc("grid", line, linewidth=2, color="g", alpha=0.5)https://cdn.nlark.com/yuque/0/2023/png/2235414/1687008377277-da9bb48d-64fa-466d-aa5b-936e8c9f71ca.png#averageHue=%23fbf9f8&clientId=u180e4a2b-a937-4&from=paste&height=342&id=uf5660a3a&originHeight=427&originWidth=584&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=39614&status=done&style=stroke&taskId=uf3601665-ac42-4f19-990b-95e28ae0526&title=&width=467.2
这是修改后的效果,修改前的效果和上一节中的一样。
3. 刻度

刻度相关的参数如下:
xcount = 1
ycount = 1
for key, val in plt.rcParams.items():
    if key.startswith("xtick"):
      print(key, " = ", val)
      xcount += 1

    if key.startswith("ytick"):
      print(key, " = ", val)
      ycount += 1

print(f"xtick 相关设置有: {xcount} 个")
print(f"ytick 相关设置有: {ycount} 个")https://cdn.nlark.com/yuque/0/2023/png/2235414/1687008680394-d054c3bb-8a5a-4771-b782-08a596c4cf76.png#averageHue=%23e6e8ed&clientId=u180e4a2b-a937-4&from=paste&height=671&id=u3fe5b851&originHeight=839&originWidth=542&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=120259&status=done&style=stroke&taskId=u109c9311-cfa1-4612-9194-b4148031cc0&title=&width=433.6
X轴刻度和Y轴刻度的相关设置各有21个。
设置方法和效果如下:
plt.rcParams.update(plt.rcParamsDefault)
plt.rc("xtick", color="g", direction="in")
plt.rc("ytick", color="r")https://cdn.nlark.com/yuque/0/2023/png/2235414/1687009241278-a48518f2-8961-409c-a242-5a4cf1743db4.png#averageHue=%23fcf9f8&clientId=u180e4a2b-a937-4&from=paste&height=338&id=ubd6d1ab3&originHeight=422&originWidth=584&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=40308&status=done&style=stroke&taskId=ud37ef5e8-b1eb-4902-9638-8ecf83a5230&title=&width=467.2
上面的示例分别设置X轴和Y轴的颜色,以及X轴的direction,
direction="in" 表示刻度的小短线在图形内部,
Y轴没设置这个属性,它的刻度线是在图形外的。
4. 颜色列表

我们绘制图形的时候,一个图形中有多个曲线时,每个曲线默认就会使用不同的颜色。
这是因为配置中有一个默认的颜色列表,绘制多个图形时,会依次使用其中的颜色。
print(plt.rcParams["axes.prop_cycle"])

#运行结果
cycler('color',
['#1f77b4',
'#ff7f0e',
'#2ca02c',
'#d62728',
'#9467bd',
'#8c564b',
'#e377c2',
'#7f7f7f',
'#bcbd22',
'#17becf'])如果去查下颜色编码的话,可以看出,前两个颜色就是蓝色和红色。
所以上面的示例中的两条曲线都是蓝色和红色。
修改下这个默认的颜色列表,看看变化效果:
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

from matplotlib import cycler

colors = cycler(
    "color", ["#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"]
)

plt.rcParams.update(plt.rcParamsDefault)
plt.rc("axes", prop_cycle=colors)

fig = plt.figure()
ax = fig.add_axes()
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend()
plt.show()https://cdn.nlark.com/yuque/0/2023/png/2235414/1687011354901-6917e272-a768-4bd9-a685-9342cb23a797.png#averageHue=%23faf9f9&clientId=u180e4a2b-a937-4&from=paste&height=342&id=u30dbf249&originHeight=427&originWidth=584&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=38060&status=done&style=stroke&taskId=u915fbe76-252a-42b0-a538-7213154157e&title=&width=467.2
改变颜色列表之后,两条曲线的颜色都变了。
绘制曲线或者其他图形时,其实是有参数可以指定颜色的,为什么还需要这个颜色列表的配置?
这是因为,如果我们能够确定整体报告的风格,那么就可以在一开始就根据报告的风格设置好这个颜色列表,
然后绘制各种图形时就不需要指定颜色,极大简化后续的代码,也提高了代码的可维护性。
5. 总结

在配置 rcParams 时,我们可以根据需要修改各种选项,以达到更好的显示效果。
但需要注意的是,过多地修改 rcParams可能会导致绘图缓慢或出现其他问题,
因此需要根据实际情况进行合理的配置。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【matplotlib基础】--绘图配置