顏色漸變算法


需求:

給定一組數據,給定漸變顏色兩端的顏色值,需要根據這組數據中的每個值大小為其分配一個顏色

算法:

一個需要用顏色表示值大小的數據集weightlist,給定漸變的起始顏色 colorStart={"red":255,"green":50,"blue":47},結束顏色colorend ={"red":139,"green":20,"blue":10},minNum=min(weightlist),maxNum=max(weightlist),weightlist中的一個值number,計算其對應的顏色值color

\[\frac{number-minNum}{maxNum-minNum}=\frac{color-colorStart}{colorend -colorStart} \]

最終顏色值:

\[color=\frac{(number-minNum)(colorend -colorStart)}{maxNum-minNum}+colorStart \]

將colorR,colorG,colorB分別代入計算

實現

    def getColorstr(value):    #將rgb顏色轉換為16進制
        digit = list(map(str, range(10))) + list("ABCDEF")  
        if isinstance(value, tuple): 
            string = '#'      
            for i in value:      
                a1 = i // 16       
                a2 = i % 16      
                string += digit[a1] + digit[a2]     
            return string 
    def gerColorOfWeight1(minNum,maxNum,colorStart,colorend,number): #顏色,根據數值均分
        colorR=(colorend["red"]-colorStart["red"])*(number-minNum)/(maxNum-minNum)+colorStart["red"]
        colorG=(colorend["green"]-colorStart["green"])*(number-minNum)/(maxNum-minNum)+colorStart["green"]
        colorB=(colorend["blue"]-colorStart["blue"])*(number-minNum)/(maxNum-minNum)+colorStart["blue"]
        color= "rgb("+str(int(colorR))+','+str(int(colorG))+','+str(int(colorB))+')'  
        #color=getColorstr((int(colorR),int(colorG),int(colorB)))#轉換為16進制顏色
        return color
    colorYouNeed=gerColorOfWeight1(min(weightlist),max(weightlist),{"red":255,"green":50,"blue":47} ,{"red":139,"green":20,"blue":10} ,1000* errornum/linenum)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM