[PYTHON] matplotlib Création d'une liste de couleurs

introduction

De nos jours, la plupart des calculs sont effectués en Python à la fois pour les loisirs et le travail, et le graphique est également fait en Python matplotlib. J'utiliserai des couleurs pour le graphique afin d'améliorer le caractère distinctif, mais je voulais garder la liste des couleurs de matplotlib à portée de main, j'ai donc créé une image de la liste des couleurs.

Exemple

fig_col_mpl.png

Comment faire

Obtenez une liste de couleurs pouvant être gérées par matplotlib en vous référant à ce qui suit. Vous pouvez obtenir des noms de couleurs et des valeurs hexadécimales au format dictionnaire.

Noms et listes de couleurs pouvant être spécifiées avec matplotlib

Tout ce que vous avez à faire maintenant est de remplir la zone rectangulaire spécifiée avec fill```.

Cependant, afin de spécifier la couleur en faisant référence à cela lors de la création d'un graphique, je souhaite afficher le nom de la couleur et la valeur hexadécimale sous forme de texte. Le problème est le nom de la couleur et la couleur d'affichage du texte hexadécimal. Vous pouvez les spécifier un par un, mais j'ai décidé d'utiliser la valeur HSV car je pourrais d'une manière ou d'une autre spécifier la couleur d'affichage automatiquement.

Dans mon cas, l'hexadécimal est utilisé pour spécifier la couleur d'affichage, mais afin de déterminer la couleur d'affichage du texte, la couleur de la bande hexadécimale est une fois convertie en RVB, puis convertie en HSV, et le texte est affiché en fonction de cette valeur. J'ai essayé de décider de la couleur.

La fonction (def penc ()) qui détermine la couleur d'affichage du texte est la suivante. colorsys.rgb_to_hsv, Je l'utilise donc pour la conversion de RVB en HSV.

def penc(hval):
    r=int(hval[1:3],16)
    g=int(hval[3:5],16)
    b=int(hval[6:8],16)
    hsv=colorsys.rgb_to_hsv(r/255, g/255, b/255)
    h=hsv[0]
    s=hsv[1]
    v=hsv[2]
    col='#000000'
    if 0.5<h: col='#ffffff'
    if v<0.75: col='#ffffff'
    return col

Dans l'exemple ci-dessus, la couleur d'affichage du texte est d'abord spécifiée comme noir (# 000000), mais si le HSV H dépasse 0,5 et la valeur V est inférieure à 0,75, la couleur d'affichage du texte est le blanc (#ffffff). J'essaye de le faire. J'ai pensé à utiliser la couleur opposée, mais j'étais réticent à rendre la couleur d'affichage du texte colorée, j'ai donc décidé de diviser la couleur d'affichage uniquement par le noir et blanc.

Programme complet

import matplotlib
import colorsys
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.family'] = 'Ricty Diminished'


def penc(hval):
    #https://docs.python.org/ja/3/library/colorsys.html
    r=int(hval[1:3],16)
    g=int(hval[3:5],16)
    b=int(hval[6:8],16)
    hsv=colorsys.rgb_to_hsv(r/255, g/255, b/255)
    h=hsv[0]
    s=hsv[1]
    v=hsv[2]
    col='#000000'
    if 0.5<h: col='#ffffff'
    if v<0.75: col='#ffffff'
    return col
    

cdic=matplotlib.colors.cnames
lkey=[]
lval=[]
for key, val in zip(cdic.keys(), cdic.values()):
    lkey=lkey+[key]
    lval=lval+[val]
    
xmin=0
xmax=4
k=-1
fnameF='fig_col_mpl.png'
ymin=0
ymax=37
plt.figure(figsize=(6,12))
plt.xlim([xmin,xmax])
plt.ylim([ymax,ymin])
plt.axis('off')
fsize=8 # fontsize
k=-1
for i in range(int(ymin),int(ymax)):
    for j in range(0,4):
        k=k+1
        if k<len(lval):
            xs=float(j)
            xe=xs+1.0
            ys=float(i)
            ye=ys+1.0
            xx=[xs,xe,xe,xs]
            yy=[ys,ys,ye,ye]
            plt.fill(xx,yy,color=lval[k])
            text1=lkey[k]
            text2=lval[k]
            xg=0.5*(xs+xe)
            yg=0.5*(ys+ye)
            col=penc(lval[k])
            plt.text(xg,yg-0.25,text1,rotation=0,ha='center',va='center',fontsize=fsize,color=col)
            plt.text(xg,yg+0.25,text2,rotation=0,ha='center',va='center',fontsize=fsize,color=col)
plt.savefig(fnameF, dpi=300, bbox_inches="tight", pad_inches=0)

c'est tout

Recommended Posts

matplotlib Création d'une liste de couleurs
liste des cartes de couleurs palettables
Galerie matplotlib et carte des couleurs
Sélectionnez les couleurs en dégradé avec matplotlib
Couleur en continu avec le diagramme de dispersion matplotlib
Spécifiez la couleur dans la carte 2D matplotlib
Création d'animation flexible à l'aide de l'animation.FuncAnimation de matplotlib
Définissez la couleur des xticklabels individuellement avec matplotlib