如何在matplotlib 2.0中只使用阴影线填充区域而不使用背景颜色?
在数据可视化中,填充区域的阴影线常常被用来表示数据的分布范围。在matplotlib 2.0及以上版本中,有几种方法可以实现只使用阴影线填充区域而不使用背景颜色。本文将介绍其中两种方法。
方法一:使用fill_between函数
fill_between函数可以绘制两条曲线之间的区域。当两条曲线在同一坐标轴上时,fill_between函数可以用来填充两条曲线之间的区域。我们可以使用fill_between函数的where参数来控制填充区域的范围。具体代码如下:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots()
ax.fill_between(x, y1, y2, color='none', hatch='/', edgecolor='gray', linewidth=0.5, where=y1>=y2)
ax.fill_between(x, y1, y2, color='none', hatch='\\', edgecolor='gray', linewidth=0.5, where=y1<y2)
ax.plot(x, y1, color='blue')
ax.plot(x, y2, color='red')
ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.5, 1.5)
plt.show()
运行上述代码,得到的图像中,蓝色线表示sin函数曲线,红色线表示cos函数曲线,灰色的斜线和反斜线之间的区域被用斜线和反斜线填充。其中,color=’none’参数可以用来指定填充区域不使用任何背景颜色,hatch=’/’和hatch=’\’参数分别用来指定填充线的样式,edgecolor=’gray’参数用来指定阴影线的颜色,linewidth=0.5参数用来指定阴影线的粗细程度。
where=y1>=y2和where=y1<y2参数用来控制填充区域的范围。where参数需要指定一个与x轴无关的布尔数列,布尔数列中为True的点才会被填充。在本例中,y1>=y2表示sin函数曲线在cos函数曲线之上的点将被填充,而y1<y2表示sin函数曲线在cos函数曲线之下的点将被填充。
方法二:使用fill_betweenx函数
fill_betweenx函数可以绘制两条水平直线之间的区域。当两条水平直线在横坐标轴上时,fill_betweenx函数可以用来填充两条水平直线之间的区域。我们同样可以使用fill_betweenx函数的where参数来控制填充区域的范围。具体代码如下:
import numpy as np
import matplotlib.pyplot as plt
y = np.linspace(-1, 1, 100)
x1 = np.sin(y)
x2 = np.cos(y)
fig, ax = plt.subplots()
ax.fill_betweenx(y, x1, x2, color='none', hatch='/', edgecolor='gray', linewidth=0.5, where=x1>=x2)
ax.fill_betweenx(y, x1, x2, color='none', hatch='\\', edgecolor='gray', linewidth=0.5, where=x1<x2)
ax.plot(x1, y, color='blue')
ax.plot(x2, y, color='red')
ax.set_ylim(-1, 1)
ax.set_xlim(-1.5, 1.5)
plt.show()
运行上述代码,得到的图像中,蓝色线表示sin函数曲线,红色线表示cos函数曲线,灰色的斜线和反斜线之间的区域被用斜线和反斜线填充。其中,color=’none’参数可以用来指定填充区域不使用任何背景颜色,hatch=’/’和hatch=’\’参数分别用来指定填充线的样式,edgecolor=’gray’参数用来指定阴影线的颜色,linewidth=0.5参数用来指定阴影线的粗细程度。
where=x1>=x2和where=x1<x2参数用来控制填充区域的范围。where参数同样需要指定一个与y轴无关的布尔数列,布尔数列中为True的点才会被填充。在本例中,x1>=x2表示sin函数曲线在cos函数曲线之右的点将被填充,而x1<x2表示sin函数曲线在cos函数曲线之左的点将被填充。
结论
本文介绍了如何在matplotlib 2.0及以上版本中只使用阴影线填充区域而不使用背景颜色。我们可以使用fill_between函数或fill_betweenx函数实现这一功能。其中,where参数可以用来控制填充区域的范围,color、hatch、edgecolor和linewidth参数可以用来控制填充阴影线的样式。