我尝试使用修改后的颜色条创建下图所示的缩放图,仅显示可见数据系列。 通过修改x& y绘图限制,我可以确保每行保持相同的颜色。使用下面的代码片段,我可以找到每个数据系列的索引数组,这些索引在新轴限制( buslist )中可见,然后我使用它来创建一个新的颜色映射( cmap_vals - > cmap_new )。我偶然发现一个example让我非常接近我需要的东西,但我无法弄清楚为什么它没有将所有颜色映射到颜色条,正如你在上一个情节中所看到的那样。请注意, buslist 数组是非顺序(即放大的图中缺少#13)。
# Sort VUFmag array
ars = -np.sort(-VUFmag,axis=-1)*100
fig, ax = plt.subplots(figsize=(6,4)) # Create figure and axis tuple
x = 100*(np.arange(ars.shape[-1]))/ars.shape[-1] # Define x-axis as % of time
n = len(ars)
cmap = plt.get_cmap('jet', n)
for i in range(ars.shape[0]):
ax.plot(x,ars[i,:],color=cmap(i)) # Plot data
# Display limits
xlim=(-0.005,0.1)
ylim=(1.9,np.max(VUFmag*100)*1.05)
# Get bus numbers to be shown on colorbar
buslist = np.unique(np.nonzero(VUFmag > ylim[0]/100)[0])
#Get cmap values
cmap_vals = cmap(np.arange(n))[buslist]
# Define new cmap
cmap_new = matplotlib.colors.LinearSegmentedColormap.from_list('new_cmap', cmap_vals)
norm = matplotlib.colors.BoundaryNorm(np.arange(0,len(buslist)+1)-0.5, len(buslist))
# Define SM
sm = plt.cm.ScalarMappable(cmap=cmap_new, norm=norm)
sm.set_array([])
# Plot colorbar
clb = plt.colorbar(sm, ticks=np.arange(0,len(buslist)), pad=0.01)
# Set colorbar labels
clb.ax.set_yticklabels(buslist+1)
clb.set_label('Bus No.', labelpad=10)