Python 色見本作成(matplotlibで使える色名)
matplotlibで使える色名前の見本作成プログラム
- コマンド
matplotlib.colors.cnames
により、色名・16進数のペアが辞書形式で得られますので、これを処理していきます。 - 色短冊の中には、色名、16進数、RGBを表示していますが、発色は16進数で指定しています。
- 関数mainの最後で、画像貼り付け用に、ImageMagickコマンドをsubprocessで実行し、余白削除を行っています。
import matplotlib.pyplot as plt import matplotlib import subprocess def cols(ssrgb): # definition of text color s=(ssrgb.lstrip('(')).rstrip(')') text=s.split(',') r=int(text[0]) g=int(text[1]) b=int(text[2]) r1=abs(255-r) # r of opposite color g1=abs(255-g) # g of opposite color b1=abs(255-b) # b of opposite color # colstr='#{0:02x}{1:02x}{2:02x}'.format(r1,g1,b1) colstr='#000000' if int(255*3/2)<r1+g1+b1: colstr='#ffffff' if 250<g+b: colstr='#000000' if r+g==0: colstr='#ffffff' return colstr def drawfig(scol,shex,srgb): # drawing of color strip with color name fsz=10 xmin=0.0; xmax=4.0 ymin=0.0; ymax=20.0 k=-1 for nnn in [1,2]: if nnn==1: i1=0 i2=20 if nnn==2: i1=20 i2=40 plt.figure(figsize=(10,12)) plt.rcParams['font.size']=fsz plt.rcParams['font.family']='sans-serif' plt.xlim([xmin,xmax]) plt.ylim([ymax,ymin]) plt.axis('off') for i in range(i1,i2): for j in range(0,4): k=k+1 if k<len(scol): x1=float(j); y1=float(i-i1) x2=x1+1.0 ; y2=y1 x3=x2 ; y3=y2+1.0 x4=x1 ; y4=y3 plt.fill([x1,x2,x3,x4,x1],[y1,y2,y3,y4,y1],color=shex[k],alpha=1.0) colstr=cols(srgb[k]) ss=scol[k]+'\n'+shex[k]+' '+srgb[k] plt.text(0.5*(x1+x2),0.5*(y2+y3),ss,ha='center',va='center',color=colstr,fontsize=fsz) fnameF='fig_col_py'+str(nnn)+'.jpg' plt.savefig(fnameF, dpi=200, bbox_inches="tight", pad_inches=0.0) plt.show() def main(): # obtain pairs of color name and hexadecimal as a dictionary dic=matplotlib.colors.cnames # print(len(dic)) # print(dic) scol=[] # list for color name shex=[] # list for hexadecimal expression srgb=[] # list for RGB expression for vcol,vhex in zip(dic.keys(),dic.values()): n1=int(vhex[1:3],16) # r in to decimal n2=int(vhex[3:5],16) # b in decimal n3=int(vhex[5:7],16) # g in decimal vrgb='('+str(n1)+','+str(n2)+','+str(n3)+')' scol=scol+[vcol] shex=shex+[vhex] srgb=srgb+[vrgb] drawfig(scol,shex,srgb) cmd1='convert fig_col_py1.jpg -trim fig_col_py1.jpg' cmd2='convert fig_col_py2.jpg -trim fig_col_py2.jpg' subprocess.call(cmd1,shell=True) subprocess.call(cmd2,shell=True) #============== # Execution #============== if __name__ == '__main__': main()
色見本の出力結果
はてなブログにアップするため、2分割で出力しています。