[PYTHON] matplotlib Erstellen einer Farbliste

Einführung

Heutzutage werden die meisten Berechnungen in Python sowohl für Hobbys als auch für die Arbeit durchgeführt, und die grafische Darstellung erfolgt auch in Python matplotlib. Ich werde Farben für das Diagramm verwenden, um die Unterscheidungskraft zu verbessern, aber ich wollte die Farbliste von matplotlib zur Hand haben, also habe ich ein Bild der Farbliste erstellt.

Beispiel

fig_col_mpl.png

Wie man ... macht

Eine Liste der Farben, die von matplotlib verarbeitet werden können, finden Sie im Folgenden. Sie können Farbnamen und Hexadezimalwerte im Wörterbuchformat erhalten.

Namen und Listen von Farben, die mit matplotlib angegeben werden können

Jetzt müssen Sie nur noch den angegebenen rechteckigen Bereich mit `` `fill``` füllen.

Um jedoch die Farbe anzugeben, indem ich beim Erstellen eines Diagramms darauf Bezug nehme, möchte ich den Farbnamen und den Hexadezimalwert als Text anzeigen. Das Problem ist der Farbname und die Anzeigefarbe des hexadezimalen Textes. Sie können sie einzeln angeben, aber ich habe mich für den HSV-Wert entschieden, da ich die Anzeigefarbe irgendwie automatisch festlegen konnte.

In meinem Fall wird Hexadezimal verwendet, um die Anzeigefarbe anzugeben. Um jedoch die Textanzeigefarbe zu bestimmen, wird die Hexadezimalstreifenfarbe einmal in RGB konvertiert, dann in HSV konvertiert und der Text wird basierend auf diesem Wert angezeigt. Ich habe versucht, die Farbe zu bestimmen.

Die Funktion (def penc ()), die die Farbe der Textanzeige bestimmt, ist wie folgt. coloursys.rgb_to_hsv, Also benutze ich dies für die Konvertierung von RGB zu 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

Im obigen Beispiel wird die Textanzeigefarbe zuerst als Schwarz angegeben (# 000000). Wenn der HSV H jedoch 0,5 überschreitet und der V-Wert weniger als 0,75 beträgt, ist die Textanzeigefarbe weiß (#ffffff). Ich versuche es zu tun. Ich dachte darüber nach, die entgegengesetzte Farbe zu verwenden, aber ich wollte die Textanzeigefarbe nicht bunt machen, deshalb habe ich beschlossen, die Anzeigefarbe nur durch Schwarzweiß zu teilen.

Volles Programm

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)

das ist alles

Recommended Posts

matplotlib Erstellen einer Farbliste
palettable Farbkartenliste
Matplotlib Galerie und Farbkarte
Wählen Sie mit matplotlib abgestufte Farben aus
Kontinuierliche Farbe mit Matplotlib-Streudiagramm
Geben Sie die Farbe in der matplotlib 2D-Karte an
Flexible Animationserstellung mit Animation.FuncAnimation von matplotlib
Stellen Sie die Farbe der xticklabels individuell mit matplotlib ein