在具有特定颜色和抖动的箱形图上绘制数据点
Plotting data points over a box plot with specific colors & jitter in plotly
我有一个 plotly.graph_objects.Box
图,我在箱形图中显示了所有点。我需要通过数据的属性为标记着色(如下所示)。我也想抖动点数(下图不显示)
使用 Box
我可以绘制点并抖动它们,但我不认为我可以给它们着色。
fig.add_trace(go.Box(
name='Data',
y=y,
jitter=0.5,
boxpoints='all',
))
为了给图上色,我使用 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',
))
值得注意的是,x
值是 Box
图的文本标签。我在问题中发现:.
现在我可以通过同时使用 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()
我有一个 plotly.graph_objects.Box
图,我在箱形图中显示了所有点。我需要通过数据的属性为标记着色(如下所示)。我也想抖动点数(下图不显示)
使用 Box
我可以绘制点并抖动它们,但我不认为我可以给它们着色。
fig.add_trace(go.Box(
name='Data',
y=y,
jitter=0.5,
boxpoints='all',
))
为了给图上色,我使用 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',
))
值得注意的是,x
值是 Box
图的文本标签。我在问题中发现:
现在我可以通过同时使用 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()