繁体   English   中英

Matplotlib:透明间谍 plot 在 imshow

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM