gpt4 book ai didi

python - Plotly:如何使用 go.box 而不是 px.box 对数据进行分组和指定颜色?

转载 作者:行者123 更新时间:2023-12-04 13:15:53 25 4
gpt4 key购买 nike

问题:

使用 plotly express 您可以使用 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属性(property)不被承认为有效。

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'用于图形布局,以防止框显示在彼此之上。

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

现在对于...

how can you define the colors for the boxes?



...部分。

框的颜色由 fillcolor 定义默认为线条颜色的半透明变体。在上面的示例中,您可以将透明绿色设置为 全部 盒子使用 fillcolor='rgba(0,255,0,0.5)' :

plotly 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

设置 line 和 fillcolor 最简单的方法就是设置 line=dict(color='black')fillcolor='yellow'对于所有组:

图 4:回到基础

enter image description here

完整代码:
# imports
import plotly.express as px
import plotly.graph_objects as go

# data
df = px.data.tips()

# plotly setup
fig=go.Figure()

# a plotly trace for each subcategory
for i, smokes in enumerate(df['smoker'].unique()):
df_plot=df[df['smoker']==smokes]

fig.add_trace(go.Box(x=df_plot['time'], y=df_plot['total_bill'],
notched=True,
line=dict(color='black'),
#line=dict(color=colors[i]),
fillcolor='yellow',
#fillcolor=colors[i+4],
name='smoker=' + smokes))

# figure layout adjustments
fig.update_layout(boxmode='group', xaxis_tickangle=0)
fig.show()

关于这一切的一些细节:

How can you achieve the same thing in Plotly Go? Because the color property is not recognised as valid.



如果您研究 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.

换句话说,什么 colorpx.Box为您做的是将数据集拆分为例如 px.data.tips() 等长格式数据集中的唯一组。

说到 go.box没有这样的方法,你只需要接受 ValueError:

ValueError: Invalid property specified for object of type plotly.graph_objs.Box: 'color'

关于python - Plotly:如何使用 go.box 而不是 px.box 对数据进行分组和指定颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com