是否可以对Matplotlib Imshow图形进行颜色编码?

时间:2019-07-16 15:34:15

标签: python matplotlib plot

我正在处理一些2D数据(在这种情况下是语音频谱图),并且如果可能的话,我想在图形上标注语音偏斜。我很快就通过在顶部使用每列的颜色编码模式来模拟一种很好的方法来直观地表示差异。可以想象,这种颜色编码还应该导致侧面有一个matplotlib.legend()对象。

要生成标签,我想使用一维向量的类标签(例如[0、0、0、1、1、0、0、0、2、2、0等]所有列)。

如果图例也使用qualitative colormaps,那就太酷了。

enter image description here

因此,简而言之,有什么方法可以在Matplotlib中本地进行吗?

1 个答案:

答案 0 :(得分:1)

要充实@ImportanceOfBeingErnest的评论,以下是我将如何做的事情:

from mpl_toolkits.axes_grid1 import make_axes_locatable
# use of `make_axes_locatable` simplifies positioning the
# accessory axes

# Generate data, it would have been nice if you had provided
# these in your question BTW
Ncols, Nlines = 200,50
data = np.random.random(size=(Nlines,Ncols))
class_labels = np.zeros(shape=(Ncols,))
class_labels[50:100] = 1
class_labels[100:150] = 2
class_labels = class_labels.reshape((1,Ncols))

fig, ax = plt.subplots(1,1)
# create new axes on the right and on the top of the current axes.
divider = make_axes_locatable(ax)
class_ax = divider.append_axes("top", size=0.1, pad=0., sharex=ax)
cbar_ax = divider.append_axes("right", size=0.1, pad=0.1)

#plot sonogram
im = ax.imshow(data, cmap='viridis')
fig.colorbar(im, cax=cbar_ax) # sonogram colorbar

# plot diarization classes
class_ax.imshow(class_labels, aspect='auto', cmap='rainbow')
class_ax.set_axis_off()

enter image description here