प्लॉटली: प्लॉटली.ग्राफ_बॉज और प्लॉटली.एक्सप्रेस का उपयोग करके किसी आकृति में रंगों को कैसे परिभाषित किया जाए?
कई सवाल और जवाब हैं जो इस विषय पर एक तरह से या किसी अन्य पर स्पर्श करते हैं। इस योगदान के साथ मैं स्पष्ट रूप से प्रदर्शित करना चाहते हैं यही कारण है कि इस तरह के रूप में एक आसान approch marker = {'color' : 'red'}
के लिए इच्छा काम plotly.graph_objects (go)
है, लेकिन color='red'
के लिए नहीं होगा plotly.express (px)
, हालांकि रंग दोनों की एक विशेषता है px.Line
और px.Scatter
। और मैं यह प्रदर्शित करना चाहूंगा कि यह भयानक क्यों है?
इसलिए, अगर एक स्पष्ट रूप से आंकड़ा बनानेpx
का सबसे आसान तरीका माना जाता है , तो color='red'
त्रुटि को वापस करने के रूप में स्पष्ट रूप से स्पष्ट रूप से कुछ क्यों किया जाता है
ValueError: 'color' का मान 'data_frame' में एक कॉलम का नाम नहीं है।
मुझे एक गैपस्मिन्डर डेटासेट को लागू करने के लिए प्रदर्शित करें और दुनिया भर के सभी (कम से कम सबसे अधिक ) देशों के लिए Life expectancy
बनाम का एक स्कैल्पलॉट दिखाएं । नीचे की तरह एक बुनियादी सेटअप निम्नलिखित भूखंड का उत्पादन करेगाGDP per capita
2007
चित्र 1, प्लॉट का उपयोग कर go
:
रंग एक चक्र नाम से निर्धारित होता है, लेकिन यहां इसका उपयोग निर्दिष्ट है marker = {'color' : 'red'}
चित्र 2, कोड:
import plotly.graph_objects as go
df = px.data.gapminder()
df=df.query("year==2007")
fig = go.Figure()
fig.add_traces(go.Scatter(x=df['gdpPercap'], y=df["lifeExp"],
mode = 'markers',
marker = {'color' : 'red'}
))
fig.show()
तो चलो इस के साथ कोशिश करते हैं px
, और लगता है कि color='red'
चाल करेंगे:
कोड 2, परिभाषित रंग के साथ स्कैटर प्लॉट में प्रयास px
:
# imports
import plotly.express as px
import pandas as pd
# dataframe
df = px.data.gapminder()
df=df.query("year==2007")
# plotly express scatter plot
px.scatter(df, x="gdpPercap", y="lifeExp",
color = 'red',
)
परिणाम:
ValueError: 'color' का मान 'data_frame' में एक कॉलम का नाम नहीं है। एक ['देश', 'महाद्वीप', 'वर्ष', 'lifeExp', 'pop', 'gdpPercap', 'iso_alpha', 'iso_num'] की अपेक्षा की गई, लेकिन प्राप्त की गई - लाल
तो यहां क्या हो रहा है?
जवाब
सबसे पहले, अगर बीच के व्यापक अंतरों की व्याख्या आवश्यक है go
और px
कृपया यहां और यहां एक नज़र डालें । और अगर कोई स्पष्टीकरण की आवश्यकता नहीं है, तो आपको उत्तर के अंत में एक पूर्ण कोड स्निपेट मिलेगा, जो प्लॉटली.एक्सप्रेस में रंगों के साथ कई शक्तियों को प्रकट करेगा।
भाग 1: सार:
यह पहली बार में प्रतीत नहीं हो सकता है, लेकिन बहुत अच्छे कारण color='red'
हैं जो काम नहीं करता है जैसा कि आप उपयोग करने की उम्मीद कर सकते हैं px
। लेकिन सबसे पहले, यदि आप सभी को करना चाहते हैं, तो सभी मार्करों के लिए मैन्युअल रूप से एक विशेष रंग सेट करना होगा, जो कि आप अजगर रोपण विधि के.update_traces(marker=dict(color='red'))
लिए धन्यवाद का उपयोग कर सकते हैं । लेकिन पहले, बहरा सेटिंग्स को देखने की सुविधा देता है:
१.१ प्लॉटली डिफॉल्ट्स व्यक्त करते हैं
चित्रा 1, px डिफ़ॉल्ट स्कैल्पलॉट का उपयोग कर px.Scatter
कोड 1, px डिफ़ॉल्ट स्कैल्पलॉट का उपयोग करना px.Scatter
# imports
import plotly.express as px
import pandas as pd
# dataframe
df = px.data.gapminder()
df=df.query("year==2007")
# plotly express scatter plot
px.scatter(df, x="gdpPercap", y="lifeExp")
यहां, जैसा कि पहले ही प्रश्न में उल्लेख किया गया है, रंग डिफ़ॉल्ट रूप से उपलब्ध क्रम में पहले रंग के रूप में सेट किया गया है px.colors.qualitative.Plotly
:
['#636EFA', # the plotly blue you can see above
'#EF553B',
'#00CC96',
'#AB63FA',
'#FFA15A',
'#19D3F3',
'#FF6692',
'#B6E880',
'#FF97FF',
'#FECB52']
और यह बहुत अच्छा लग रहा है। लेकिन क्या होगा अगर आप चीजों को बदलना चाहते हैं और एक ही समय में अधिक जानकारी भी जोड़ सकते हैं?
1.2: डिफॉल्ट को कैसे ओवरराइड करें और पीएक्स रंगों के साथ ठीक वही करें जो आप चाहते हैं:
जैसा कि हमने साथ पढ़ा था px.scatter
, एक तर्क के रूप में color
विशेषता रंग नहीं लेती है red
। बल्कि, आप उदाहरण के लिए color='continent'
किसी डेटासेट में विभिन्न चर के बीच आसानी से अंतर करने के लिए उपयोग कर सकते हैं । लेकिन रंगों में इतना अधिक है px
:
छह निम्नलिखित विधियों के संयोजन से आप बिल्कुल वैसा ही कर पाएंगे जैसा आप रंगों के साथ व्यक्त करते हैं। ध्यान रखें कि आपको चुनना भी नहीं है । आप एक ही समय में नीचे दिए गए किसी एक , कुछ या सभी तरीकों का उपयोग कर सकते हैं । और एक विशेष उपयोगी दृष्टिकोण खुद को कॉम्बीनाटिनो के रूप में प्रकट करेगा 1
और 3
। लेकिन हम इसे थोड़ा समझेंगे। आपको ऐसा करने की आवश्यकता है:
1. px द्वारा उपयोग किए जाने वाले रंग क्रम को बदलें:
color_discrete_sequence=px.colors.qualitative.Alphabet
2. तर्क के साथ अलग-अलग चर को अलग-अलग रंग असाइन करें color
color = 'continent'
3. एक या एक से अधिक चर रंगों को अनुकूलित करें
color_discrete_map={"Asia": 'red'}
4. आसानी से अपने समूह का एक बड़ा उपसमुच्चय ताना समझ का उपयोग कर औरcolor_discrete_map
subset = {"Asia", "Africa", "Oceania"}
group_color = {i: 'red' for i in subset}
5. रंग कोड का उपयोग कर अपारदर्शिता सेट करें rgba()
।
color_discrete_map={"Asia": 'rgba(255,0,0,0.4)'}
6. सभी सेटिंग्स को ओवरराइड करें:
.update_traces(marker=dict(color='red'))
भाग 2: विवरण और भूखंड
निम्नलिखित स्निपेट नीचे दिए गए कथानक का उत्पादन करेगा जो सकल घरेलू उत्पाद के विभिन्न स्तरों के लिए सभी महाद्वीपों के लिए जीवन प्रत्याशा दिखाता है। मार्करों का आकार चीजों के अलग-अलग स्तरों का प्रतिनिधित्व करता है ताकि चीजें सही हो जाएं।
प्लॉट 2:
कोड 2:
import plotly.express as px
import pandas as pd
# dataframe, input
df = px.data.gapminder()
df=df.query("year==2007")
px.scatter(df, x="gdpPercap", y="lifeExp",
color = 'continent',
size='pop',
)
ऊपर दिए गए तरीकों के लचीलेपन को स्पष्ट करने के लिए, पहले रंग अनुक्रम को बदलने की सुविधा देता है । चूंकि हम शुरुआत के लिए केवल एक श्रेणी और एक रंग दिखा रहे हैं , इसलिए आपको वास्तविक प्रभावों को देखने के लिए बाद के चरणों का इंतजार करना होगा। लेकिन यहाँ color_discrete_sequence=px.colors.qualitative.Alphabet
चरण 1 के अनुसार अब एक ही साजिश है :
1. px द्वारा उपयोग किए गए रंग क्रम को बदलें
color_discrete_sequence=px.colors.qualitative.Alphabet
अब, रंगों Alphabet
को अलग-अलग महाद्वीपों में रंग क्रम से लागू करते हैं :
2. तर्क के साथ अलग-अलग चर को अलग-अलग रंग असाइन करें color
color = 'continent'
यदि आप, मेरी तरह, सोचते हैं कि यह विशेष रंग अनुक्रम आंखों पर आसान है, लेकिन शायद थोड़ा अप्रभेद्य है, तो आप इस तरह से एक या एक से अधिक महाद्वीपों के लिए अपने रंग का रंग असाइन कर सकते हैं:
3. एक या एक से अधिक चर रंगों को अनुकूलित करें
color_discrete_map={"Asia": 'red'}
और यह बहुत बढ़िया है: अब आप अनुक्रम को बदल सकते हैं और किसी भी रंग को चुन सकते हैं जिसे आप विशेष रूप से दिलचस्प चर के लिए पसंद करेंगे। यदि आप किसी विशेष रंग को एक बड़े उपसमुच्चय में निर्दिष्ट करना चाहते हैं लेकिन ऊपर की विधि थोड़ी थकाऊ हो सकती है। तो यहाँ कैसे आप एक साथ भी है कि क्या कर सकते हैं dict समझ :
4. एक तानाशाही समझ का उपयोग करके एक समूह को रंग असाइन करें औरcolor_discrete_map
# imports
import plotly.express as px
import pandas as pd
# dataframe
df = px.data.gapminder()
df=df.query("year==2007")
subset = {"Asia", "Europe", "Oceania"}
group_color = {i: 'red' for i in subset}
# plotly express scatter plot
px.scatter(df, x="gdpPercap", y="lifeExp",
size='pop',
color='continent',
color_discrete_sequence=px.colors.qualitative.Alphabet,
color_discrete_map=group_color
)
5.rgba()
रंग कोड का उपयोग कर अपारदर्शिता सेट करें ।
अब एक कदम पीछे चलते हैं। यदि आपको लगता है कि red
एशिया में बस ठीक है, लेकिन शायद थोड़ा मजबूत है, तो आप इस rgba
रंग का उपयोग करके अस्पष्टता को समायोजित कर सकते हैं 'rgba(255,0,0,0.4)'
:
अंतिम प्लॉट के लिए पूरा कोड:
import plotly.express as px
import pandas as pd
# dataframe, input
df = px.data.gapminder()
df=df.query("year==2007")
px.scatter(df, x="gdpPercap", y="lifeExp",
color_discrete_sequence=px.colors.qualitative.Alphabet,
color = 'continent',
size='pop',
color_discrete_map={"Asia": 'rgba(255,0,0,0.4)'}
)
और अगर आपको लगता है कि हम अब तक थोड़ा जटिल हो रहे हैं, तो आप फिर से इस तरह सभी सेटिंग्स को ओवरराइड कर सकते हैं:
6. सभी सेटिंग्स को ओवरराइड करें:
.update_traces(marker=dict(color='red'))
और यह हमें वापस वहीं लाता है जहां हमने शुरू किया था। मुझे आशा है कि आपको यह उपयोगी लगेगा!
उपलब्ध सभी विकल्पों के साथ पूरा कोड स्निपेट:
# imports
import plotly.express as px
import pandas as pd
# dataframe
df = px.data.gapminder()
df=df.query("year==2007")
subset = {"Asia", "Europe", "Oceania"}
group_color = {i: 'red' for i in subset}
# plotly express scatter plot
px.scatter(df, x="gdpPercap", y="lifeExp",
size='pop',
color='continent',
color_discrete_sequence=px.colors.qualitative.Alphabet,
#color_discrete_map=group_color
color_discrete_map={"Asia": 'rgba(255,0,0,0.4)'}
)#.update_traces(marker=dict(color='red'))