Значение Pcolorme sh не сопоставлено с правильным бином в matplotlib BoundaryNorm - PullRequest
1 голос
/ 05 марта 2020

Я строю одну строку данных, используя pcolorme sh, чтобы обеспечить цветовое кодирование для статистического вывода результатов теста вместе с серией времени.

Я использую дискретизированную цветовую карту, и при правильном количестве цветов по сравнению с ячейками в bordernorm я вижу, что значения, которые я пытаюсь построить, не отображаются на правильный цвет. Например, третья точка данных и полоса имеют значение 94, но принимают цвет, сопоставленный между 95 и 97,5. Пример ниже.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl



# bbox
cb_x0 = 0.95
cb_y0 = 0.1225
cb_xlen = 0.05
cb_ylen = 0.205


cmap_whole = plt.cm.get_cmap('YlOrRd')
cmap0 = 'white'
cmap1 = cmap_whole(0.1)
cmap2 = cmap_whole(0.2)
cmap3 = cmap_whole(0.4)
cmap4 = cmap_whole(0.6)
cmap5 = cmap_whole(0.9)
colors = [cmap0,cmap1,cmap2,cmap3,cmap4,cmap5]
cmap_cl = mpl.colors.ListedColormap(colors, N=len(colors))
values = [85,90,92.5,95,97.5,99,100]

# coordinates and data
x = np.arange(1985,2020,3)
y = np.arange(0,2,1)
data = [17.0, 99.0, 94.0, 98.0, 82.0, 99.0, 99.0, 45.0, 55.0, 57.0, 94.0]


# plotting
f,ax = plt.subplots(nrows=1,ncols=1)

h = ax.pcolormesh(x,y,np.reshape(data,(1,len(data))), cmap = cmap_cl, vmin = 85, vmax = 100) 
ax.tick_params(left=False,labelleft=False,bottom=True,labelbottom=False)

norm = mpl.colors.BoundaryNorm(values,6,clip=True)
cbax = f.add_axes([cb_x0, cb_y0, cb_xlen, cb_ylen])
cb = mpl.colorbar.ColorbarBase(ax=cbax, cmap=cmap_cl,
                                   norm=norm,
                                   spacing='proportional',
                                   orientation='vertical',
                                   boundaries=values,
                                   extend='neither',
                                   ticks=values)
cb.ax.tick_params(labelcolor='0.2', labelsize=7, color='k', width=0.5, direction='out'); 
cb.ax.set_yticklabels(['0%','90%',None,'95%',None,None,'100%']) 
cb.outline.set_linewidth(0.6)

plt.show(h)

вот моя цифра

...