2015-06-16 2 views
3

Я пытаюсь построить полигоны формы-формы с цветами в соответствии с некоторыми данными и добавить цветную панель. Ниже показан код, который я написал для этой цели. Это дает график правильно, но нет ярлыков или меток для цветной панели.Почему цветной бар matplotlib не показывает никаких меток и меток

fig, ax = plt.subplots(1,1,figsize=(12,10), subplot_kw={'projection': ccrs.PlateCarree()}) 
ptchs1 = [] 
for nshp in indx[0,:]: 
    ptchs = [] 
    pts  = np.array(shapes[nshp].points) 
    pts  =pts[np.unique(np.where(~np.isnan(pts[:,:]))[0]),:] 
    prt  = shapes[nshp].parts 
    par  = list(prt) + [pts.shape[0]] 
    for pij in xrange(len(prt)): 
     ptchs.append(Polygon(pts[par[pij]:par[pij+1]])) 
     ptchs1.append(Polygon(pts[par[pij]:par[pij+1]])) 
    ind=np.where(indx==nshp)[1] ; 
    ax.add_collection(PatchCollection(ptchs,facecolor=my_cmap[np.where(indx==nshp)[1],:],edgecolor='k', linewidths=.5),ccrs.PlateCarree()) 
    plt.text(xtext[ind], ytext[ind],dnme[ind][0:7],fontsize=8,color='k',fontweight='bold', ha='center',va='center',transform=ccrs.Geodetic()) 
ax.set_xlim(np.round(mnbbx[0]).astype(int)-0.5,np.round(mxbbx[2]).astype(int)+0.5,2) 
ax.set_ylim(np.round(mnbbx[1]).astype(int)-0.5,np.round(mxbbx[3]).astype(int)+0.5,2) 
m = cm.ScalarMappable(cmap=cmap) 
m.set_array([]) 
m.set_clim(-0.5, 14+0.5) 
divider = make_axes_locatable(ax) 
cax = divider.append_axes("right",aspect=20,size="5%",pad=0.05,map_projection=ccrs.PlateCarree())  
cb=fig.colorbar(m,cax=cax,norm=norm) 
cb.set_ticks(np.arange(0,14)) 
cb.set_label('RainFall(mm/day)', rotation=90) 
cb.set_ticklabels([1,5,10,20,30,40,70,100,130,160,190,220,250]) 
xticks = np.arange(np.round(mnbbx[0]).astype(int)-0.5,np.round(mxbbx[2]).astype(int)+0.5,2) 
yticks = np.arange(np.round(mnbbx[1]).astype(int)-0.5,np.round(mxbbx[3]).astype(int)+0.5,2) 

gl = ax.gridlines(crs=ccrs.PlateCarree(),draw_labels=True,linewidth=0.7, color='black', alpha=1) 
gl.xlabels_bottom = False ;  gl.ylabels_right = False 
degree_locator = mticker.MaxNLocator(nbins=4) #it will give gridlines of 4*4 size 
gl.xlocator = degree_locator 
gl.ylocator = degree_locator 
_DEGREE_SYMBOL = u'\u00B0' 
gl.xformatter = LONGITUDE_FORMATTER #it will change lon to degree format 
gl.yformatter = LATITUDE_FORMATTER 
gl.ylabel_style = {'size': 12, 'color': 'black'} # here we can adjust color and size of ticks 
gl.xlabel_style = {'color': 'black', 'size': 12 } 
plt.show() 

Может ли кто-нибудь помочь мне в этом, почему маркировка ярлыков и этикеток не производится? enter image description here

Я обновил мой цвет бар черчения этот кусок кода, он строит правильно, но основной сюжет и цвет бар размер отличается (либо большие или малые)

col_bnd=[0,1, 5, 10, 20, 30, 40, 70, 100, 130, 160, 190, 220, 250,300] 
    norm = colors.BoundaryNorm(col_bnd, cmap.N) 
    col_bnd=[1, 5, 10, 20, 30, 40, 70, 100, 130, 160, 190, 220, 250] 
    ax1, ax2 = mpl.colorbar.make_axes(ax, shrink=0.68,aspect=20,pad=0.05) 
    cbar = mpl.colorbar.ColorbarBase(ax1, cmap=cmap,norm=norm,ticks=col_bnd,boundaries=None,format='%1i') #mpl.colors.Normalize(vmin=-0.5, vmax=1.5)) 
    cbar.set_clim(0, 300) 
    cbar.set_label('RainFall(mm/day)', rotation=90) 

может кто-нибудь сказать, как сделать как основной сюжет, так и цветную полосу того же размера?

ответ

-1

[Редактировать]

Как прокомментировал ниже, кажется, что ColorBars нужно немного другой способ показа этикеток. Вы можете попробовать это:

cb.set_yticklabels([1,5,10,20,30,40,70,100,130,160,190,220,250]) 

Вы должны вызвать функцию «легенды» для каждого художника вы создаете в вашем коде, если вы делаете другие заговоры. Например, у вас есть художник ax, и вы установите для него всю необходимую информацию, за исключением легенды. Таким образом, вы должны назвать его до plt.show() так он может генерировать легенду правильно:

ax.legend() 
fig.legend() 

И так далее.

документация имеет очень хорошие направляющие для legend и artists функции:

+0

Он не создает легенду, но Colorbar – tom

+0

Вы правильно. Из документации цветные панели не требуют установки легенды, как и другие сюжеты. Из [кода, который я прочитал] (http://matplotlib.org/examples/pylab_examples/colorbar_tick_labelling_demo.html), однако, вам нужно указать направление тика маркировки. В его случае было бы что-то вроде: 'cbar.ax.set_yticklabels (['<-1', '0', '> 1'])' – chicao

+0

нет, это не помогло, никаких других мыслей? – pkv

Смежные вопросы