修改显著性打点的颜色

以一个序列和一个场的相关系数为例,绘制带显著性检验的填色图。

通过contourf函数的hatch功能实现的显著性打点的颜色默认为黑色,然后当填色背景色调较深时,黑色的显著性打点会不明显,这里提供一个修改显著性打点颜色的方案:

1
2
3
4
5
6
7
8
import matplotlib.pyplot as plt
import numpy as np
# 随机生成一个二维数据用于绘制图形
x = np.linspace(-3, 5, 150).reshape(1, -1)
y = np.linspace(-3, 5, 120).reshape(-1, 1)
z = np.cos(x) + np.sin(y)
x, y = x.flatten(), y.flatten()
#x,y,z的形状分别为(150,) (120,) (120, 150)

利用contourf的hatch功能进行图形填充(思路是通过对contourf对象的collections属性进行更加具体的设置,以实现contourf函数中参数不能实现的部分):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
plt.figure()
n_levels = 6#6个水平层级,对应8个填充区间
plt.contour(x, y, z, n_levels, colors='black', linestyles='-')
cs = plt.contourf(
x, y, z, n_levels, colors='none',
hatches=['.', '/', '\\', None, '\\\\', '*'],
extend='lower',)
#8个填充区间的填充颜色
colors = ['maroon', 'red', 'darkorange', 'gold', 'forestgreen',
'darkturquoise', 'dodgerblue', 'darkviolet']
# 指定每个区间形状填充的颜色
for i, collection in enumerate(cs.collections):
collection.set_edgecolor(colors[i % len(colors)])
# 将边界填充粗细设置为0
for collection in cs.collections:
collection.set_linewidth(0)

输出图形如下: