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() #输出图形
输出结果为:
图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() #输出图形
运行后输出结果为:
图2
由图2可见,每个图都按照自己的颜色铺满了坐标轴,和图1不一样,图1整个背景颜色与图2左侧一致,坐标轴内部颜色和图2右侧一致。
因此尝试追溯不同,仔细对比会发现:图1对应代码再subplots中设置了颜色,图2对应代码直接删除了,因此尝试把图2代码更改为:
fig, [ax1,ax2] = plt.subplots(1,2,facecolor=(.18, .31, .31))
此时我们获得了期待的图片:
图3
由此可见:在subplots中定义的facecolor,设置了整个画图区域的背景颜色,单个ax.set_facecolor()设置的是坐标轴内部的颜色。
【4】总结
掌握了图像全区域背景颜色设置和坐标轴区域颜色设置技巧。