Plotly: plotly.graph_objects ve plotly.express kullanarak bir şekilde renkler nasıl tanımlanır?
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.Line
ve px.Scatter
. Ve neden olmamasının harika olduğunu göstermek istiyorum.
Yani, eğer px
olması 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 expectancy
karşı GDP per capita
tü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 px
ve 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
Arasında daha geniş farkların açıklaması Öncelikle, go
ve px
gerekli 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
, color
nitelik red
argü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 1
ve 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.Alphabet
1. 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, Alphabet
renk 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. red
Asya'ya uygun olduğunu düşünüyorsanız , ancak belki biraz fazla güçlüyse, aşağıdaki rgba
gibi 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'))