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.
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.
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