ves*_*and 6 python plotly plotly-python
有许多问题和答案以一种或另一种方式涉及这个主题。有了这个贡献我想清楚地说明为什么一个简单的计算策略,如marker = {'color' : 'red'}对工作的意愿plotly.graph_objects (go),但color='red'不会为了plotly.express (px)虽然颜色是两者的属性px.Line和px.Scatter。而且我想说明为什么它的真棒,它没有。
所以,如果px应该是制作情节图的最简单方法,那么为什么像color='red'返回错误这样明显的东西
ValueError: 'color' 的值不是 'data_frame' 中列的名称。
让我applyig一个展示gapminder数据集和显示的散点图Life expectancy对GDP per capita所有(至少大多数世界各地的)国家作为2007。像下面这样的基本设置将产生以下图
go:颜色由名为plotly的循环设置,但在此处指定使用 marker = {'color' : 'red'}
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()
Run Code Online (Sandbox Code Playgroud)
所以让我们用 来试试这个px,并假设它color='red'可以解决问题:
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',
)
Run Code Online (Sandbox Code Playgroud)
ValueError: 'color' 的值不是 'data_frame' 中列的名称。预期 ['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap', 'iso_alpha', 'iso_num'] 之一但收到:红色
那么这里发生了什么?
ves*_*and 13
首先,如果之间的更广泛的差异的说明go和px要求,请看看这里和这里。如果绝对不需要解释,你会在答案的最后找到一个完整的代码片段,它将揭示 plotly.express 中的许多颜色的权力
这可能似乎并不那么在第一,但也有非常为什么好的理由color='red'不工作,你所期望的使用px。但首先,如果你想要做的是手动设置特定的颜色为所有标记,你可以这样做,用.update_traces(marker=dict(color='red'))感谢蟒蛇链接方法。但首先,让我们看看默认设置:
px.Scatterpx.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")
Run Code Online (Sandbox Code Playgroud)
在这里,正如问题中已经提到的,颜色被设置为默认绘图序列中的第一种颜色px.colors.qualitative.Plotly:
['#636EFA', # the plotly blue you can see above
'#EF553B',
'#00CC96',
'#AB63FA',
'#FFA15A',
'#19D3F3',
'#FF6692',
'#B6E880',
'#FF97FF',
'#FECB52']
Run Code Online (Sandbox Code Playgroud)
这看起来很不错。但是,如果您想更改内容甚至同时添加更多信息,该怎么办?
正如我们已经提到的px.scatter,该color属性不采用颜色 likered作为参数。相反,您可以例如用于color='continent'轻松区分数据集中的不同变量。但是还有更多的颜色px:
以下六个方法的结合,将让你这样做正是你使用plotly表达颜色喜欢什么。请记住,您甚至不必选择。您可以同时使用以下一种、部分或全部方法。和一个特定的有用的方法将自己作为揭示的combinatino1和3。但我们稍后会谈到这一点。这是你需要知道的:
1. 更改 px 使用的颜色序列:
color_discrete_sequence=px.colors.qualitative.Alphabet
Run Code Online (Sandbox Code Playgroud)
2. 用 参数为不同的变量分配不同的颜色color
color = 'continent'
Run Code Online (Sandbox Code Playgroud)
3. 自定义一种或多种可变颜色
color_discrete_map={"Asia": 'red'}
Run Code Online (Sandbox Code Playgroud)
4. 使用 dict comprehension 和color_discrete_map
subset = {"Asia", "Africa", "Oceania"}
group_color = {i: 'red' for i in subset}
Run Code Online (Sandbox Code Playgroud)
5. 使用rgba()颜色代码设置不透明度。
color_discrete_map={"Asia": 'rgba(255,0,0,0.4)'}
Run Code Online (Sandbox Code Playgroud)
6. 覆盖所有设置:
.update_traces(marker=dict(color='red'))
Run Code Online (Sandbox Code Playgroud)
下面的代码片段将生成下面的图表,该图表显示了所有大陆在不同 GDP 水平下的预期寿命。标记的大小代表不同级别的人群,从一开始就让事情变得更有趣。
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',
)
Run Code Online (Sandbox Code Playgroud)
为了说明上述方法的灵活性,让我们首先更改颜色序列。由于我们初学者只展示了一种类别和一种颜色,因此您必须等待后续步骤才能看到真正的效果。但现在color_discrete_sequence=px.colors.qualitative.Alphabet按照步骤 1 的情节相同:
1. 改变px使用的颜色序列
color_discrete_sequence=px.colors.qualitative.Alphabet
Run Code Online (Sandbox Code Playgroud)
现在,让我们将Alphabet颜色序列中的颜色应用到不同的大陆:
2. 用 参数为不同的变量分配不同的颜色color
color = 'continent'
Run Code Online (Sandbox Code Playgroud)
如果你和我一样,认为这个特定的颜色序列在眼睛上很容易但可能有点难以区分,你可以为一个或多个大陆分配一种你选择的颜色,如下所示:
3. 自定义一种或多种可变颜色
color_discrete_map={"Asia": 'red'}
Run Code Online (Sandbox Code Playgroud)
这非常棒:现在您可以更改序列并为特别有趣的变量选择您喜欢的任何颜色。但是,如果您想将特定颜色分配给更大的子集,则上述方法可能会有些乏味。因此,您也可以通过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
)
Run Code Online (Sandbox Code Playgroud)
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)'}
)
Run Code Online (Sandbox Code Playgroud)
如果您认为我们现在变得有点太复杂了,您可以再次覆盖所有设置:
6.覆盖所有设置:
.update_traces(marker=dict(color='red'))
Run Code Online (Sandbox Code Playgroud)
这让我们又回到了开始的地方。我希望你会发现这很有用!
# 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'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8308 次 |
| 最近记录: |