python画图|图像背景颜色设置

python画图出来的默认图形背景是白色,有时候并不适合大家表达想要表达的意思。

因此,我们很有必要掌握自己设置图形背景颜色的技巧。

【1】官网教程

首先请各位看官移步官网,看看官网如何设置,下述链接可轻松到达:

Color Demo — Matplotlib 3.9.2 documentation

官网代码非常简洁,图形也很漂亮,为此,很有必要读懂代码。

【2】读懂代码

首先,计算模块nump和画图模块matplotlib引入:

import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

然后即刻定义了变量:

t = np.linspace(0.0, 2.0, 201) #定义自变量
s = np.sin(2 * np.pi * t) #定义因变量

 再之后进行了颜色定义:

# 1) RGB tuple:
fig, ax = plt.subplots(facecolor=(.18, .31, .31)) #定义要画图,图形背景颜色RGB=(.18, .31, .31)
# 2) hex string:
ax.set_facecolor('#eafff5')

根据colors页面的说法,这两个可能是重复定义,1)是按照RGB的形式定义颜色,2)是按照六位字符的形式定义颜色。

为此,我们将在第三章做一个测试,此处继续解读代码。

剩余部分比较简单,分别设置X轴和Y轴的标签颜色:

ax.set_xlabel('Time [s]', color='c') #设置X轴名称,颜色为青绿色
# 5) a named color:
ax.set_ylabel('Voltage [mV]', color='peachpuff') #设置Y轴名称,颜色为peachpuff

然后设置了图形的线型和颜色:

# 6) a named xkcd color:
ax.plot(t, s, 'xkcd:crimson') #画图,t为自变量,s为因变量
# 7) Cn notation:
ax.plot(t, .7*s, color='C4', linestyle='--') #画图,t为自变量,.7*s为因变量
# 8) tab notation:
ax.tick_params(labelcolor='tab:orange') #对轴标签的颜色按照橙色设置

最后表示要输出图形:

plt.show() #输出图形

输出结果为:

bd10374fdb614b6ab42953a05985fc91.png

图1

【3】测试代码

前述已经提及,设置背景颜色有GRB和六位字符两种方式,因此官网代码算是重复定义,因此尝试将两种定义方法并列输出。

首先定义并列画图:

fig, [ax1,ax2] = plt.subplots(1,2)

然后分别为ax1和ax2设置颜色:

ax1.set_facecolor((.18, .31, .31))
# 2) hex string:
ax2.set_facecolor('#eafff5')

之后为X轴和Y轴的设置,保持ax1和ax2完全一致:

# 3) gray level string:
ax2.set_title('Voltage vs. time chart', color='0.7') #设置图名,颜色
# 4) single letter color string
ax2.set_xlabel('Time [s]', color='c') #设置X轴名称,颜色为青绿色
# 5) a named color:
ax2.set_ylabel('Voltage [mV]', color='peachpuff') #设置Y轴名称,颜色为peachpuff
# 6) a named xkcd color:
ax2.plot(t, s, 'xkcd:crimson') #画图,t为自变量,s为因变量
# 7) Cn notation:
ax2.plot(t, .7*s, color='C4', linestyle='--') #画图,t为自变量,.7*s为因变量
# 8) tab notation:
ax2.tick_params(labelcolor='tab:orange') #对轴标签的颜色按照橙色设置

此时的完整代码为:

import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

t = np.linspace(0.0, 2.0, 201) #定义自变量
s = np.sin(2 * np.pi * t) #定义因变量

# 1) RGB tuple:
fig, [ax1,ax2] = plt.subplots(1,2,) #定义要画图,图形背景颜色RGB=(.18, .31, .31)
ax1.set_facecolor((.18, .31, .31))
# 2) hex string:
ax2.set_facecolor('#eafff5')
# 3) gray level string:
ax1.set_title('Voltage vs. time chart', color='0.7') #设置图名,颜色
# 4) single letter color string
ax1.set_xlabel('Time [s]', color='c') #设置X轴名称,颜色为青绿色
# 5) a named color:
ax1.set_ylabel('Voltage [mV]', color='peachpuff') #设置Y轴名称,颜色为peachpuff
# 6) a named xkcd color:
ax1.plot(t, s, 'xkcd:crimson') #画图,t为自变量,s为因变量
# 7) Cn notation:
ax1.plot(t, .7*s, color='C4', linestyle='--') #画图,t为自变量,.7*s为因变量
# 8) tab notation:
ax1.tick_params(labelcolor='tab:orange') #对轴标签的颜色按照橙色设置

# 3) gray level string:
ax2.set_title('Voltage vs. time chart', color='0.7') #设置图名,颜色
# 4) single letter color string
ax2.set_xlabel('Time [s]', color='c') #设置X轴名称,颜色为青绿色
# 5) a named color:
ax2.set_ylabel('Voltage [mV]', color='peachpuff') #设置Y轴名称,颜色为peachpuff
# 6) a named xkcd color:
ax2.plot(t, s, 'xkcd:crimson') #画图,t为自变量,s为因变量
# 7) Cn notation:
ax2.plot(t, .7*s, color='C4', linestyle='--') #画图,t为自变量,.7*s为因变量
# 8) tab notation:
ax2.tick_params(labelcolor='tab:orange') #对轴标签的颜色按照橙色设置

plt.show() #输出图形

运行后输出结果为:

453d8d711734433b97af3fb9da6ce998.png

图2

由图2可见,每个图都按照自己的颜色铺满了坐标轴,和图1不一样,图1整个背景颜色与图2左侧一致,坐标轴内部颜色和图2右侧一致。

因此尝试追溯不同,仔细对比会发现:图1对应代码再subplots中设置了颜色,图2对应代码直接删除了,因此尝试把图2代码更改为:

fig, [ax1,ax2] = plt.subplots(1,2,facecolor=(.18, .31, .31))

此时我们获得了期待的图片:

9558999e7ee2402b9ca5df776b161e41.png

图3

由此可见:在subplots中定义的facecolor,设置了整个画图区域的背景颜色,单个ax.set_facecolor()设置的是坐标轴内部的颜色。

【4】总结

掌握了图像全区域背景颜色设置和坐标轴区域颜色设置技巧。