繁体   English   中英

如何 plot (plotly.express) 多行基于不同的 dataFrame 零件

[英]how to plot (plotly.express) multiple lines based on different dataFrame parts

我有一个 dataFrame 例如:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame(data = [{'key': '1', 'value': '1', 'metadata': '3'}, {'key': '2', 'value': '2', 'metadata': '3'}, {'key': '1', 'value': '3', 'metadata': '3'}, {'key': '2', 'value': '4', 'metadata':
   ...: '3'}])

In [3]: df
Out[3]: 
  key value metadata
0   1     1        3
1   2     2        3
2   1     3        3
3   2     4        3

我想用“键”分割df,即

In [4]: df_list = [d for _, d in df.groupby(['key'])]

In [5]: df_list
Out[5]: 
[  key value metadata
 0   1     1        3
 2   1     3        3,
   key value metadata
 1   2     2        3
 3   2     4        3]

现在我有基于唯一键数量的 N (2) dataFrame的列表。 如何使用 plot 这个plotly

我可以

In [6]: import plotly.express as px

In [7]: fig = px.line(df_list[0])

但我怎样才能添加其他行? plotly.express.Figure没有add_line方法...

运行plotly.express将返回plotly.graph_objs._figure.Figure object。 plotly.graph_objectsgo.Figure()也是如此。 因此,在使用 plotly express 构建图形后,您可以使用以下命令添加线条或轨迹:

fig.add_trace(go.Scatter)

或者:

fig.add_scatter()

其他选项包括:

fig.add_area()
fig.add_bar()

构建fig后,您可以运行dir(fig)了解更多信息。

因此,在 dataframe 中,例如:

   2021  2022  2023
0     0     0     0
1     0    -1    -2
2    -1    -1    -3
3    -1    -2    -2
4    -1    -1    -3

您可以使用以下方法将线条/轨迹添加到现有图形:

fig.add_trace(go.Scatter(x = df.index, y = df['2023']))

如果您希望通过字典控制数据子集,添加多个跟踪的一种方法是:

extra = {'2024': df['2024'],
         '2025': df['2025']}

for k, v in extra.items():
    fig.add_scatter(x=v.index, y = v, name = k + ' from dict' )

在此处输入图像描述

完整代码:

import pandas as pd
import numpy as np
import plotly
import plotly.express as px
import plotly.graph_objects as go

# data
np.random.seed(1)
start = 2021
ncols = 6
nrows = 1000
cols = [str(i) for i in np.arange(start, start+ncols)]
df = pd.DataFrame(np.random.randint(-1,2, (nrows,ncols)), columns = cols).cumsum()
df.iloc[0] = 0

# figure
fig = px.line(df, x=df.index, y=cols[:-4])
fig.update_layout(template = 'plotly_dark')

# fig.add_trace(go.Scatter(x = df.index, y = df['2023'], name = '2023 = added trace'))

fig.add_scatter(x = df.index, y = df['2023'], name = '2023 from add_trace')


extra = {'2024': df['2024'],
         '2025': df['2025']}

for k, v in extra.items():
    fig.add_scatter(x=v.index, y = v, name = k + ' from dict' )

fig.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM