from matplotlib import rcParams rcParams['font.family'] = 'sans-serif' rcParams['font.sans-serif'] = ['Consolas'] import matplotlib.pyplot as plt from matplotlib.patches import Rectangle import colorsys ls_h=[0,30,60,90,120,150,180,210,240,270,300,330] ls_s=[255,128, 64,255,128, 64,255,128, 64] ls_v=[255,255,255,192,192,192,128,128,128] n=len(ls_h) m=len(ls_s) scolor=[] for ii,h in enumerate(ls_h): sh=[] for s,v in zip(ls_s,ls_v): r,g,b=colorsys.hsv_to_rgb(h/360, s/255, v/255) ir=int(round(r*255,0)) ig=int(round(g*255,0)) ib=int(round(b*255,0)) hrgb='#' hrgb=hrgb+'{0:0>2x}'.format(ir) hrgb=hrgb+'{0:0>2x}'.format(ig) hrgb=hrgb+'{0:0>2x}'.format(ib) scolor=scolor+[hrgb] sx=0.01 sy=0.01 fig = plt.figure(figsize=(9,6)) ax = plt.gca() k=-1 for i in range(1,n+1): for j in range(0,m): k=k+1 col=scolor[k] x=float(j)+sx y=float(n-i)+sy dx=1.0-2.0*sx dy=1.0-2.0*sy xg=x+0.5*dx yg=y+0.5*dy cn='#000000' if 3<=j: cn='#ffffff' ax.add_patch(Rectangle((x,y), dx, dy, color=col)) plt.text(xg,yg,col,ha='center',va='center',fontsize=10,color=cn) ls_h.reverse() # y-axis label j=-1 x=float(j)+sx dx=1.0-2.0*sx xg=x+0.5*dx for i,h in enumerate(ls_h): y=float(i)+sy dy=1.0-2.0*sy yg=y+0.5*dy cn='black' plt.text(xg,yg,str(h),ha='center',va='center',fontsize=11,color=cn) # x-axis label i=len(ls_h) y=float(i)+sy dy=1.0-2.0*sy yg=y+0.5*dy j=-1 for s,v in zip(ls_s,ls_v): j=j+1 x=float(j)+sx dx=1.0-2.0*sx xg=x+0.5*dx cn='black' plt.text(xg,yg+dy/4,'s='+str(s),ha='center',va='center',fontsize=11,color=cn) plt.text(xg,yg-dy/4,'v='+str(v),ha='center',va='center',fontsize=11,color=cn) # draw 'h' j=-1;i=len(ls_h) x=float(j)+sx y=float(i)+sy dx=1.0-2.0*sx dy=1.0-2.0*sy xg=x+0.5*dx yg=y+0.5*dy cn='black' plt.text(xg,yg,'h',ha='center',va='center',fontsize=11,color=cn) plt.xlim([-1,len(ls_s)]) plt.ylim([0,len(ls_h)+1]) plt.axis('off') plt.savefig("fig_col_hsv.png", dpi=200) plt.show()