情节:如何使用go.box而不是px.box分组数据指定颜色?

问题描述 投票:1回答:1

问题:

使用绘图表达可以使用color=<group>中的px.box()分组数据并分配不同的颜色。但是如何使用plotly.graph_objectsgo.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,但这也不起作用。

python plotly boxplot
1个回答
0
投票

让我们直接跳到答案,然后在细节上阐明一些细节。为了设置go.box图形的颜色,您必须将数据集划分为要研究的组,然后使用line=dict(color=<color>)将颜色分配给每个子类别。下面的代码段将向您展示如何使用plotlys内置的颜色循环来获得与使用plotly express相同的结果,而无需为每个类别指定每种颜色。您还必须将图形布局设置为boxmode='group',以防止将框显示在彼此的顶部。

图1-使用go.box

enter image description here

代码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)'

enter image description here

或者您可以使用fillcolor=colors[i+4]引用与用于线色相同的颜色循环的不同颜色>

图3:

fillcolor=colors[i+4]

enter image description here

有关这一切的一些详细信息:

您如何在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的对象指定了无效的属性:'颜色'

© www.soinside.com 2019 - 2024. All rights reserved.