प्लॉटली: प्लॉटली.ग्राफ_बॉज और प्लॉटली.एक्सप्रेस का उपयोग करके किसी आकृति में रंगों को कैसे परिभाषित किया जाए?

Aug 17 2020

कई सवाल और जवाब हैं जो इस विषय पर एक तरह से या किसी अन्य पर स्पर्श करते हैं। इस योगदान के साथ मैं स्पष्ट रूप से प्रदर्शित करना चाहते हैं यही कारण है कि इस तरह के रूप में एक आसान 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 capita2007

चित्र 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'] की अपेक्षा की गई, लेकिन प्राप्त की गई - लाल

तो यहां क्या हो रहा है?

जवाब

7 vestland Aug 18 2020 at 00:22

सबसे पहले, अगर बीच के व्यापक अंतरों की व्याख्या आवश्यक है 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'))