plotly.express - 像 sns.lineplot 中的置信区间
Posted
技术标签:
【中文标题】plotly.express - 像 sns.lineplot 中的置信区间【英文标题】:plotly.express - confidence intervals like in sns.lineplot 【发布时间】:2022-01-10 23:53:38 【问题描述】:这是一个带有置信区间的 seaborn 图示例:
import plotly.express as px
import seaborn as sns
import pandas as pd
import numpy as np
np.random.seed(1)
df = pd.DataFrame('x': np.tile(np.arange(5), 6), 'y': np.random.randn(30), 'hue': np.repeat(['foo', 'bar'], [15, 15]))
sns.lineplot(data=df, x='x', y='y', hue='hue')
哪个输出
在plotly
中尝试做同样的事情:
group = ['hue', 'x']
err = df.groupby(group)['y'].std() / np.sqrt(df.groupby(group)['y'].size())
pdf = df.groupby(group)['y'].mean().reset_index()
pdf['2'] = pdf['y'] + 1.96*pdf.set_index(group).index.map(err)
pdf['1'] = pdf['y'] - 1.96*pdf.set_index(group).index.map(err)
pdf['0'] = pdf['y']
pdf = pdf.drop('y', axis=1)
pdf = pd.melt(pdf, id_vars=['x', 'hue'])
pdf = pdf.sort_values(['x', 'variable', 'hue'], ascending = True)
fig = px.line(
pdf[pdf['hue']=='foo'],
line_group='hue',
x = 'x',
y = 'value',
color='variable',
color_discrete_map = '0': 'blue', '1': 'blue', '2': 'blue'
)
fig.update_traces(name = 'interval', selector = dict(name = '2'), showlegend=False)
fig.update_traces(fill = 'tonexty')
fig.update_traces(fillcolor = 'rgba(0,0,0,0)', selector = dict(name = '0'))
fig.update_traces(fillcolor = 'rgba(0,0,0,0)', line_color = 'rgba(0, 0, 255, 0.5)',
showlegend = False, selector = dict(name = '1'))
fig
哪个输出:
所以,这与 seaborn 情节相同,但只是其中一种色调。我怎样才能将另一种色调的相同图绘制到同一个图上,使它看起来像海生图?
【问题讨论】:
【参考方案1】:我花了相当多的时间试图解决这个问题,所以我最终整理了一个小包来解决这个问题,使用与 seaborn 相同的 API:https://github.com/MarcoGorelli/bornly
例子:
import bornly as bns
fmri = bns.load_dataset("fmri")
bns.lineplot(data=fmri, x="timepoint", y="signal", hue="event")
【讨论】:
以上是关于plotly.express - 像 sns.lineplot 中的置信区间的主要内容,如果未能解决你的问题,请参考以下文章
使用 plotly.express 折线图,线条以奇怪的顺序连接?怎么修? [关闭]
使用 python dict 使用 Plotly express 创建条形图
如何在 Python 中使用 Plotly Express 仅显示图例的子集(plotly.express,px)?