2009-05-18 33 views
16

में रंगीन श्रेणियां उत्पन्न करना मैं (आर, जी, बी) टुपल्स के रूप में रंग विनिर्देशों की एक सूची उत्पन्न करना चाहता हूं, जो पूरे रंग स्पेक्ट्रम को जितनी चाहें उतनी प्रविष्टियों के साथ फैलाता है।पाइथन

  • (0, 0, 1)
  • (0, 1, 0)
  • (1, 0, 0)
  • (1, 0.5: तो 5 प्रविष्टियों के लिए मैं कुछ ऐसा करना चाहेंगे , 1)
  • (0, 0, 0,5)
बेशक

, अगर वहाँ 0 और 1 के संयोजन की तुलना में अधिक प्रविष्टियां हैं यह क्या करने के लिए सबसे अच्छा तरीका होगा भिन्न, आदि का उपयोग करने के लिए बारी चाहिए इस?

उत्तर

38

एचएसवी/एचएसबी/एचएसएल कलर स्पेस का उपयोग करें (एक ही चीज़ को कम या ज्यादा के लिए तीन नाम)। एच ट्यूपल्स को ह्यू स्पेस में समान रूप से फैलाएं, फिर उन्हें आरजीबी में परिवर्तित करें।

नमूना कोड:

import colorsys 
N = 5 
HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in range(N)] 
RGB_tuples = map(lambda x: colorsys.hsv_to_rgb(*x), HSV_tuples) 
+0

ठीक है, यही वही है जो मैं चाहता हूं, लेकिन मैं उन tuples कैसे उत्पन्न करूं? :) –

+3

आसान, यह सिर्फ एक साधारण रैखिक श्रृंखला है। मैंने उपरोक्त कुछ बुनियादी नमूना कोड डाले हैं, इसे करने का एक तरीका है। – kquinn

+1

कूल, फिर colorys.hsv_to_rgb का उपयोग करके मुझे वही मिलता है जो मुझे चाहिए :)। एक्स में श्रेणी (एन) के लिए [colorsys.hsv_to_rgb (x * 1.0/एन, 0.5, 0.5)]। –

7

मैं kquinn's उत्तर के आधार पर निम्नलिखित समारोह बनाया।

import colorsys 

def get_N_HexCol(N=5): 

    HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in xrange(N)] 
    hex_out = [] 
    for rgb in HSV_tuples: 
     rgb = map(lambda x: int(x*255),colorsys.hsv_to_rgb(*rgb)) 
     hex_out.append("".join(map(lambda x: chr(x).encode('hex'),rgb))) 
    return hex_out 
+0

मैं इस (वाई) के लिए खोज रहा था। लेकिन मेरे मामले में मैंने स्पेक्ट्रम बनाने के लिए उन्हें जोड़ने के बाद बहुत हल्का नहीं किया था। आउटपुट इस तरह दिखता है [स्पेक्ट्रम] (https://postimg.org/image/qspiz6c4h/) मुझे इसके बारे में कुछ और चमक की आवश्यकता है। – ln2khanal

+0

एचएसवी स्पेस रंग, संतृप्ति, मूल्य है, इसलिए 1 के करीब एक संतृप्ति मजबूत रंग बनाती है और 1 के करीब एक मूल्य चमक से अधिक होगा। –

+0

कोई भी इसे पी 3 पर अपडेट करने का सबसे अच्छा तरीका जानता है? कुछ ऐसा: 'hex_out.append (" "। शामिल हों (सूची (मानचित्र (लैम्ब्डा एक्स: सीआर (एक्स) [2:], आरजीबी))) '? – kuanb

2

kquinn की और jhrf :) के कदम के बाद

अजगर 3 के लिए यह निम्नलिखित तरीके से किया जा सकता है:

def get_N_HexCol(N=5): 
    HSV_tuples = [(x * 1.0/N, 0.5, 0.5) for x in range(N)] 
    hex_out = [] 
    for rgb in HSV_tuples: 
     rgb = map(lambda x: int(x * 255), colorsys.hsv_to_rgb(*rgb)) 
     hex_out.append('#%02x%02x%02x' % tuple(rgb)) 
    return hex_out 
0

रंग पैलेट दिलचस्प हैं। क्या आप जानते थे कि, हरे रंग की चमक, कहें, लाल कहें, उससे अधिक तीव्रता से समझा जाता है? http://poynton.ca/PDFs/ColorFAQ.pdf पर एक नज़र डालें। आप पहले से कॉन्फ़िगर पटल का उपयोग करना चाहते हैं, seaborn's palettes पर एक नजर है:

import seaborn as sns 
palette = sns.color_palette(None, 3) 

वर्तमान पैलेट से उत्पन्न करता है 3 रंग।