Dav*_*rks 3 python boxplot plotly plotly-python stripplot
我有一个plotly.graph_objects.Box图,我正在显示箱形图中的所有点。我需要根据数据的属性为标记着色(如下所示)。我还想抖动这些点(下面未显示)。
使用Box我可以绘制点并抖动它们,但我不认为我可以为它们着色。
fig.add_trace(go.Box(
name='Data',
y=y,
jitter=0.5,
boxpoints='all',
))
Run Code Online (Sandbox Code Playgroud)
为了给图上色,我为每组添加了一条单独的迹线Scatter。它看起来像这样(伪代码):
for data in group_of_data:
fig.add_trace(go.Scatter(
name=f'{data.name}',
x=['trace 0', 'trace 0', ..., 'trace 0'],
y=data.values,
marker=dict(color=data.color),
mode='markers',
))
Run Code Online (Sandbox Code Playgroud)
值得注意的是,该x值是绘图的文本标签Box。我在问题中发现:是否可以在plotly.js箱形图上叠加标记?。
现在我可以通过一起使用go.Scatter+以正确的颜色绘制散点覆盖图go.Box,但由于我的x值是文本标签(将它们与绘图对齐Box),我不知道如何向Scatter绘图添加抖动。通常,您可以向值添加随机值x以使散点图抖动,但是当x是文本标签时我不能。
由于没有提供数据,我正在使用适当的示例数据来创建图表。数据的结构正在为带状图创建数据框。将图形名称列、y0 和 y1 添加在一起,并将颜色设置为该值。箱线图使用 y0 和 y1。首先,我们绘制一个带状图,然后添加一个额外的箱线图。我认为图例在结果图中没有按数字顺序排列是有原因的。我查了一下,只有标准、逆序、按组,但目前无法更改顺序。
import plotly.express as px
import numpy as np
import pandas as pd
np.random.seed(1)
y0 = np.random.randn(50) - 1
y1 = np.random.randn(50) + 1
df = pd.DataFrame({'graph_name':['trace 0']*len(y0)+['trace 1']*len(y1),
'value': np.concatenate([y0,y1],0),
'color':np.random.choice([0,1,2,3,4,5,6,7,8,9], size=100, replace=True)}
)
fig = px.strip(df,
x='graph_name',
y='value',
color='color',
stripmode='overlay')
fig.add_trace(go.Box(y=df.query('graph_name == "trace 0"')['value'], name='trace 0'))
fig.add_trace(go.Box(y=df.query('graph_name == "trace 1"')['value'], name='trace 1'))
fig.update_layout(autosize=False,
width=600,
height=600,
legend={'traceorder':'normal'})
fig.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6203 次 |
| 最近记录: |