Plotly: plotly.graph_objects ve plotly.express kullanarak bir şekilde renkler nasıl tanımlanır?

Aug 17 2020

Bu konuya şu ya da bu şekilde değinen birçok soru ve cevap var. Bu katkıyla açıkça göstermek istiyorum neden kolay gibi approch marker = {'color' : 'red'}için irade işin plotly.graph_objects (go)ancak color='red'değil will plotly.express (px)renk hem bir özelliği olmasına rağmen px.Lineve px.Scatter. Ve neden olmamasının harika olduğunu göstermek istiyorum.


Yani, eğer pxolması gerekiyordu bir plotly çıkarmalarıiçin için en kolay yolu , o zaman neden olarak görünüşte belirgin bir şey yapar color='red'dönüş hatası

ValueError: "renk" değeri, "veri_çerçevesi" içindeki bir sütunun adı değil.

Beni applyig bir tarafından göstereyim Gapminder kümesi ve bir dağılım grafiğini göstermektedir Life expectancykarşı GDP per capitatüm (en azından için en itibariyle dünya genelinde) ülkeleri 2007. Aşağıdaki gibi temel bir kurulum aşağıdaki arsayı üretecektir

Şekil 1, kullanarak arsa go:

Renk, plotly adlı bir döngü tarafından belirlenir, ancak burada kullanılarak belirtilir marker = {'color' : 'red'}

Şekil 2, kod:

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()

Öyleyse bunu deneyelim pxve bunun işe color='red'yarayacağını varsayalım :

Kod 2, aşağıdakileri kullanarak tanımlanmış renkle dağılım grafiğini deneyin 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',
          )

Sonuç:

ValueError: "renk" değeri, "veri_çerçevesi" içindeki bir sütunun adı değil. ["Country", "continent", "year", "lifeExp", "pop", "gdpPercap", "iso_alpha", "iso_num"] bekleniyordu, ancak şu aldı: kırmızı

Peki burada neler oluyor?

Yanıtlar

7 vestland Aug 18 2020 at 00:22

Arasında daha geniş farkların açıklaması Öncelikle, gove pxgerekli olduğu, bir göz atın lütfen buraya ve buraya . Ve kesinlikle hiçbir açıklamaya gerek yoksa, cevabın en sonunda plotly.express'teki renklerin çoğunu ortaya çıkaracak eksiksiz bir kod parçası bulacaksınız.


Bölüm 1: Öz:

İlk başta öyle görünmeyebilir, ancak kullanmayı beklediğiniz gibi çalışmamasının çok iyi nedenleri var . Ancak her şeyden önce, tek yapmak istediğiniz tüm işaretleyiciler için manuel olarak belirli bir renk ayarlamaksa , bunu piton zincirleme yöntemi sayesinde yapabilirsiniz . Ama önce sağır ayarlara bakalım:color='red'px.update_traces(marker=dict(color='red'))

1.1 Temerrütleri açıkça ifade edin

Şekil 1, px varsayılan dağılım grafiği kullanılarak px.Scatter

Kod 1, px varsayılan dağılım grafiği kullanılarak 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")

Burada, soruda daha önce bahsedildiği gibi, renk, aşağıdakiler aracılığıyla kullanılabilen varsayılan grafik dizisindeki ilk renk olarak ayarlanır px.colors.qualitative.Plotly:

['#636EFA', # the plotly blue you can see above
 '#EF553B',
 '#00CC96',
 '#AB63FA',
 '#FFA15A',
 '#19D3F3',
 '#FF6692',
 '#B6E880',
 '#FF97FF',
 '#FECB52']

Ve bu oldukça iyi görünüyor. Ama ya bir şeyleri değiştirmek ve hatta aynı anda daha fazla bilgi eklemek isterseniz?

1.2: Varsayılanlar nasıl geçersiz kılınır ve piksel renkleriyle tam olarak istediğinizi nasıl yapılır :

Daha önce de değindiğimiz gibi px.scatter, colornitelik redargüman gibi bir renk almaz . Bunun yerine, örneğin color='continent'bir veri kümesindeki farklı değişkenleri kolayca ayırt etmek için kullanabilirsiniz . Ama renklerin çok daha fazlası var px:


Aşağıdaki altı yöntemin kombinasyonu, plotly express'i kullanarak renklerle tam olarak istediğiniz şeyi yapmanıza izin verecektir . Seçmek zorunda bile olmadığını unutma . Sen kullanabilirsiniz biri , bazı veya tüm aynı anda aşağıda yöntemlerden. Ve belirli bir kullanışlı yaklaşım içinde combinatino olarak kendini ortaya koyacaktır 1ve 3. Ama buna birazdan değineceğiz. Bilmen gereken şey budur:

1. px tarafından kullanılan renk sırasını şununla değiştirin:

color_discrete_sequence=px.colors.qualitative.Alphabet

2. Bağımsız değişkenle farklı değişkenlere farklı renkler atayıncolor

color = 'continent'

3. bir veya daha fazla değişken rengi özelleştirin

color_discrete_map={"Asia": 'red'}

4. Dikte anlama özelliğini kullanarak değişkenlerinizin daha büyük bir alt kümesini kolayca gruplayın vecolor_discrete_map

subset = {"Asia", "Africa", "Oceania"}
group_color = {i: 'red' for i in subset}

5. Renk kodlarını kullanarak opaklığı ayarlayın rgba().

color_discrete_map={"Asia": 'rgba(255,0,0,0.4)'}

6. Tüm ayarları şu şekilde geçersiz kılın:

.update_traces(marker=dict(color='red'))

Bölüm 2: Ayrıntılar ve olaylar

Aşağıdaki pasaj, çeşitli GSYİH seviyeleri için tüm kıtalar için beklenen yaşam süresini gösteren aşağıdaki grafiği oluşturacaktır. İşaretlerin boyutu, işleri en başından itibaren daha ilginç hale getirmek için farklı popülasyon düzeylerini temsil eder.

Konu 2:

Kod 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',
          )

Yukarıdaki yöntemlerin esnekliğini göstermek için önce renk sırasını değiştirelim . Yeni başlayanlar için yalnızca bir kategori ve bir renk gösterdiğimizden, gerçek efektleri görmek için sonraki adımları beklemeniz gerekecek. Ama işte şimdi color_discrete_sequence=px.colors.qualitative.Alphabet1. adıma göre aynı olay örgüsü :

1. px tarafından kullanılan renk sırasını şu şekilde değiştirin:

color_discrete_sequence=px.colors.qualitative.Alphabet

Şimdi, Alphabetrenk dizisindeki renkleri farklı kıtalara uygulayalım :

2. Bağımsız değişkenle farklı değişkenlere farklı renkler atayıncolor

color = 'continent'

Siz de benim gibi, bu belirli renk dizisinin göze hoş geldiği halde belki biraz ayırt edilemez olduğunu düşünüyorsanız, seçtiğiniz bir rengi bir veya daha fazla kıtaya şöyle atayabilirsiniz:

3. bir veya daha fazla değişken rengi özelleştirin

color_discrete_map={"Asia": 'red'}

Ve bu oldukça harika: Şimdi sırayı değiştirebilir ve özellikle ilginç değişkenler için istediğiniz rengi seçebilirsiniz. Ancak, belirli bir rengi daha büyük bir alt kümeye atamak istiyorsanız, yukarıdaki yöntem biraz sıkıcı olabilir. Öyleyse, bunu bir dikte anlayışı ile nasıl yapabileceğiniz aşağıda açıklanmıştır :

4. Dikte anlayışı kullanarak bir gruba renkler atayın vecolor_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() Renk kodlarını kullanarak opaklığı ayarlayın .

Şimdi bir adım geriye gidelim. redAsya'ya uygun olduğunu düşünüyorsanız , ancak belki biraz fazla güçlüyse, aşağıdaki rgbagibi bir renk kullanarak opaklığı ayarlayabilirsiniz 'rgba(255,0,0,0.4)':

Son arsa için tam kod:

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)'}
          )

Şimdiye kadar biraz fazla karmaşıklaştığımızı düşünüyorsanız, bunun gibi tüm ayarları tekrar geçersiz kılabilirsiniz:

6. Tüm ayarları şu şekilde geçersiz kılın:

.update_traces(marker=dict(color='red'))

Bu da bizi başladığımız yere geri getiriyor. Umarım bunu faydalı bulursunuz!

Mevcut tüm seçeneklerle eksiksiz kod pasajı:

# 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'))