[英]Matplotlib: Transparent spy plot over imshow
我正在尝试创建一个 plot ,其中两种类型的图相互重叠: pyplot.spy
over pyplot.imshow
。 由于 spy 绘制了一个稀疏矩阵,我希望它在矩阵为零的地方是透明的。 但是,当我 plot 在同一轴上的稀疏矩阵时,它似乎正在创建一个新的 canvas 覆盖由 imshow 创建的一个。
这是我的步骤的描述。 请注意,我在标记样式中使用 spy,它返回 Line2D object。
A
: 大小为m*n
的数组
B
:大小为m*n
的数组,其中大多数元素为 0(其余为 1)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
p1 = ax.imshow(A, aspect='auto')
p2 = ax.spy(B, aspect = 'auto', markersize=2, alpha = 0.25)
plt.show()
我很感激建议和帮助。
基于以下想法: https://stackoverflow.com/a/51601850/8447885并根据您的需要对其进行一些调整,您可以修改颜色 map,以便将第一个值的 alpha 通道设置为 0(或类似地到上面引用的链接——从 0 逐渐增加到 1),并使用此颜色图和修改后的 alpha 值用于您的第二个 plot:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
A = np.random.rand(5,4)
B = np.zeros((5,4))
B[2,2] = 1
B[3,2] = 1
B[4,2] = 1
color_array = plt.get_cmap('seismic')(range(256))
color_array[:,-1] = np.linspace(0,1,256) # the alpha channel is the last one in the array
map_object = LinearSegmentedColormap.from_list(name='seismic_alpha',colors=color_array)
plt.register_cmap(cmap=map_object)
fig, ax = plt.subplots()
p1 = ax.imshow(A, aspect='auto',cmap='seismic')
p2 = ax.spy(B, aspect = 'auto', alpha = 0.75, cmap='seismic_alpha')
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.