मैं 'गिनती' द्वारा क्रमबद्ध बार के साथ एक अल्टेयर बारप्लॉट बनाने की कोशिश कर रहा हूं और फिर लागू करें। कच्चे रंग मान सलाखों के लिए।

import pandas as pd
import altair as alt

# Dummy data
df = pd.DataFrame({'fruit': ['apple', 'orange', 'blueberry', 'pear', 'grape', 'kiwi', 'strawberry', 'lychee'],
                  'count': [2, 4, 1, 7, 9, 12, 16, 35], 
                  'label': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
                  'colors': ['#4c78a8', '#f58518', '#e45756', '#72b7b2', '#54a24b', '#eeca3b', '#b279a2', 
                             '#9d755d']})

def make_alt_chart(df):
    g = alt.Chart(df).encode(
        x=alt.X('count'), 
        y=alt.Y('fruit', sort=alt.SortField(field='count', order='descending'))
    ).properties(
        width=700,
        height=650,
    )
    
    bars = g.mark_bar(
        size=60,
    ).encode(
        color=alt.Color('colors', sort=alt.SortField('count', order='descending'),
                        scale=None, legend=None)
    ).properties(height=alt.Step(75))

    text = g.mark_text(
        align='center',
        baseline='middle',
        dx=28
    ).encode(
        text='label'
    ).interactive()
    
    return (bars + text)

fruits = make_alt_chart(df)

fruits

sort=alt.SortField(field='count', order='descending') को y= में जोड़ने से चार्ट को मेरी पसंद के अनुसार क्रमबद्ध हो जाता है, लेकिन जब मैं बार में color=alt.Color('colors', sort=alt.SortField('count', order='descending'), scale=None, legend=None) जोड़ता हूं, तो y अक्ष पर क्रम अब 'गिनती' द्वारा क्रमबद्ध नहीं होता है।

उपरोक्त कोड को चलाने के बाद फल चार्ट इस तरह दिखता है: फलों का चार्ट

यह मेरा वांछित आउटपुट जैसा दिखेगा, लेकिन कस्टम रंगों के लागू होने के साथ: बिना रंगों के फलों का क्रमित चार्ट

अगर अल्टेयर में कस्टम रंग सेट करने का कोई आसान तरीका है तो कृपया मुझे बताएं।

नोट: रंग हेक्स मान झांकी 10 योजना हैं, लेकिन गुलाबी रंग छोड़ रहे हैं।

मैंने इन संसाधनों की समीक्षा की है, लेकिन इसका पता नहीं लगा सका:

2
Blake 1 अप्रैल 2021, 01:42

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप जावास्क्रिप्ट कंसोल में देखते हैं, तो आप देखते हैं कि रेंडरर इस चेतावनी को आउटपुट कर रहा है:

WARN Domains that should be unioned has conflicting sort properties. Sort will be set to true.

प्रासंगिक वेगा-लाइट समस्या समाधान सुझाती है; बदलने के

y=alt.Y('fruit', sort=alt.SortField(field='count', order='descending'))

साथ

y=alt.Y('fruit', sort=alt.EncodingSortField(field='count', order='descending', op='sum'))

यह परिणाम है: यहां छवि विवरण दर्ज करें

4
jakevdp 1 अप्रैल 2021, 02:03