使用plotly创建多个箱线图

Car*_*eno 5 python matplotlib boxplot python-3.x plotly

我正在尝试使用plotly 复制我在matplotlib 中制作的以下箱线图:


我的数据位于从 Excel 文件导入的非常简单的数据框中,如下所示:

正如您所看到的,我希望在 x 轴和 y 轴上有不同的条件,涵盖从 0 到 10 的范围,并为每个条件绘制不同的箱线图,并具有自己的均值、SD 等。但是,当我尝试时下面的代码我得到一个非常奇怪的输出:

import plotly.express as px
conditions = df1.keys() #all conditions, df1 being my DataFrame
conditions=list(conditions)
fig = px.box(df1, x = conditions) 
fig.show()
Run Code Online (Sandbox Code Playgroud)

输出:

任何人都知道我必须做什么才能得到类似的情节,就像我用 matplotlib 但用plotly得到的那样?

M--*_*M-- 9

您可以使用plotly.expressplotly.graph_objects

读取数据:

import pandas as pd

df = pd.read_csv(r'Documents\test.csv', sep=',')
print(df)
print(df.to_dict())
Run Code Online (Sandbox Code Playgroud)
   p=0; t=0  p=1; t=6"  p=1; t=30"  p=3; t=6"  p=3; t=30"  p=3; t=1'
0         0          3           3          2          10         10
1         2          3           5          4           9          9
2         2          6           1          1          10          9
3         1          1           4          2           7          8

{'p=0; t=0': {0: 0, 1: 2, 2: 2, 3: 1}, 'p=1; t=6"': {0: 3, 1: 3, 2: 6, 3: 1}, 
 'p=1; t=30"': {0: 3, 1: 5, 2: 1, 3: 4}, 'p=3; t=6"': {0: 2, 1: 4, 2: 1, 3: 2}, 
 'p=3; t=30"': {0: 10, 1: 9, 2: 10, 3: 7}, "p=3; t=1'": {0: 10, 1: 9, 2: 9, 3: 8}}
Run Code Online (Sandbox Code Playgroud)

plotly.graph_objects

   p=0; t=0  p=1; t=6"  p=1; t=30"  p=3; t=6"  p=3; t=30"  p=3; t=1'
0         0          3           3          2          10         10
1         2          3           5          4           9          9
2         2          6           1          1          10          9
3         1          1           4          2           7          8

{'p=0; t=0': {0: 0, 1: 2, 2: 2, 3: 1}, 'p=1; t=6"': {0: 3, 1: 3, 2: 6, 3: 1}, 
 'p=1; t=30"': {0: 3, 1: 5, 2: 1, 3: 4}, 'p=3; t=6"': {0: 2, 1: 4, 2: 1, 3: 2}, 
 'p=3; t=30"': {0: 10, 1: 9, 2: 10, 3: 7}, "p=3; t=1'": {0: 10, 1: 9, 2: 9, 3: 8}}
Run Code Online (Sandbox Code Playgroud)

plotly.express

import plotly.graph_objects as go

fig = go.Figure()

for col in df:
  fig.add_trace(go.Box(y=df[col].values, name=df[col].name))
  
fig.show()
Run Code Online (Sandbox Code Playgroud)