问题:
使用绘图表达可以使用color=<group>
中的px.box()
分组数据并分配不同的颜色。但是如何使用plotly.graph_objects
和go.box()
一些详细信息:
Plotly Express很好,但有时我们需要的不仅仅是基本知识。因此,我尝试改用Plotly Go,但是后来我想不通如何像在文档中那样为每个组手动添加go.Box
而不用组对带有框的图进行装箱。
这是我从Plotly Express文档中获取的代码:
import plotly.express as px
df = px.data.tips()
fig = px.box(df, x="time", y="total_bill", color="smoker",
notched=True, # used notched shape
title="Box plot of total bill",
hover_data=["day"] # add day column to hover data
)
fig.show()
您如何在Plotly Go中实现相同的目标?因为color
属性未被识别为有效。
import plotly.graph_objects as go
df = px.data.tips()
fig = go.Figure(go.Box(
x=df.time,
y=df.total_bill,
color="smoker",
notched=True, # used notched shape
))
fig.show()
此外,如何定义盒子的颜色?使用marker_color
仅在Plotly Go中使用一种颜色(不能提供列表),并将所有框设置为该颜色,并且对于Plotly Express而言不是有效属性。我尝试使用colorscale
,但这也不起作用。
让我们直接跳到答案,然后在细节上阐明一些细节。为了设置go.box
图形的颜色,您必须将数据集划分为要研究的组,然后使用line=dict(color=<color>)
将颜色分配给每个子类别。下面的代码段将向您展示如何使用plotlys内置的颜色循环来获得与使用plotly express相同的结果,而无需为每个类别指定每种颜色。您还必须将图形布局设置为boxmode='group'
,以防止将框显示在彼此的顶部。
图1-使用go.box
:
代码1-使用go.box
:
# imports
import plotly.graph_objects as go
import plotly.express as px
fig=go.Figure()
for i, smokes in enumerate(df['smoker'].unique()):
df_plot=df[df['smoker']==smokes]
#print(df_plot.head())
fig.add_trace(go.Box(x=df_plot['time'], y=df_plot['total_bill'],
notched=True,
line=dict(color=colors[i]),
name='smoker=' + smokes))
fig.update_layout(boxmode='group', xaxis_tickangle=0)
fig.show()
现在是...
您如何定义盒子的颜色?
... part。
框的颜色由fillcolor
定义,默认为线条颜色的半透明变体。在上面的示例中,您可以使用fillcolor='rgba(0,255,0,0.5)'
:将透明绿色设置为all
图2: fillcolor='rgba(0,255,0,0.5)'
或者您可以使用fillcolor=colors[i+4]
引用与用于线色相同的颜色循环的不同颜色>
图3:
fillcolor=colors[i+4]
有关这一切的一些详细信息:
您如何在Plotly Go中实现相同的目标?因为颜色该属性未被识别为有效。
[如果研究
go.box
的文档,您会很快发现go.box
没有color
方法,而px.box
拥有此方法:
color: str or int or Series or array-like Either a name of a column in `data_frame`, or a pandas Series or array_like object. Values from this column or array_like are used to assign color to marks.
换句话说,
color
中的px.Box
为您所做的就是将数据集拆分为长格式数据集(例如px.data.tips()
)中的唯一国家/地区,例如>
go.box
没有这种方法,您只需要接受ValueError:
[ValueError:为类型为plotly.graph_objs.Box的对象指定了无效的属性:'颜色'