Python - 带有 Plotly Express 的交互式多线图 - 需要基于列中的相似值的每一行



需要使用 Plotly Express 在交互式二维线图上绘制多条线(大型数据集 - 将产生 ~4,500 条线(。

问题是我的变量(x 和 y 轴(在 2 个单独的列中,并且每行的数据点数不同。每行的数据点数将基于"API/UWI"列---"API/UWI"值恒定的行将代表 1 行的所有数据点。

即,当"API/UWI"列中的值发生变化时,将开始一个新行。

为了清楚起见,下面是我的数据集的一小部分示例。

示例数据集

在我的第一次尝试中,我根据"API/UWI"列中的唯一值将数据帧分成多个数据帧,并将所有这些数据帧绘制成图形。成功了!但是,它产生了4,500个图表,而不是一个有4,500行的图形。

有没有更好的方法来实现这一目标并生成一个包含 4,500 行的图形?

我在下面发布了我上面所做的尝试的代码,以及一个生成的图表示例(单行(。

请尽可能详细说明您的解决方案。这是我第一次尝试任何类型的编码。我是一个非常初学者。请和谢谢!

import plotly.express as px
import pandas as pd
import numpy as np
excel_file = r"C:UserskevinDesktopBone_Spring_Data_2.xlsx"
df = pd.read_excel(excel_file)
split_values_API = df['API/UWI'].unique()
for API in split_values_API:
df1 = df[df['API/UWI'] == API]
df1 = df1.sort_values(by="Monthly Production Date")
GOR_data = px.line(df1, x='Monthly Production Date' , y='MONTHLY GOR')
GOR_data.show()

包含 1 条线的示例图

*编辑以回复评论:

df.head(21).to_dict()的输出如下:

{'API/UWI': {0: 30015209400000,
1: 30015209400000,
2: 30015209400000,
3: 30015209400000,
4: 30015209400000,
5: 30015209400000,
6: 30015209400000,
7: 30015209400000,
8: 30015221570000,
9: 30015221570000,
10: 30015221570000,
11: 30015221570000,
12: 30015221620000,
13: 30015221620000,
14: 30015221620000,
15: 30015221620000,
16: 30015221620000,
17: 30015221620000,
18: 30015221620000,
19: 30015221620000,
20: 30015221620000},
'Monthly Production Date': {0: Timestamp('2002-04-01 00:00:00'),
1: Timestamp('2002-05-01 00:00:00'),
2: Timestamp('2002-06-01 00:00:00'),
3: Timestamp('2002-07-01 00:00:00'),
4: Timestamp('2002-08-01 00:00:00'),
5: Timestamp('2002-09-01 00:00:00'),
6: Timestamp('2002-10-01 00:00:00'),
7: Timestamp('2006-07-01 00:00:00'),
8: Timestamp('2008-08-01 00:00:00'),
9: Timestamp('2008-09-01 00:00:00'),
10: Timestamp('2008-10-01 00:00:00'),
11: Timestamp('2008-11-01 00:00:00'),
12: Timestamp('2016-10-01 00:00:00'),
13: Timestamp('2016-11-01 00:00:00'),
14: Timestamp('2016-12-01 00:00:00'),
15: Timestamp('2017-01-01 00:00:00'),
16: Timestamp('2017-02-01 00:00:00'),
17: Timestamp('2017-03-01 00:00:00'),
18: Timestamp('2017-04-01 00:00:00'),
19: Timestamp('2017-05-01 00:00:00'),
20: Timestamp('2017-06-01 00:00:00')},
'MONTHLY GOR': {0: 1.278688524590164,
1: 0.8455284552845529,
2: 1.8529411764705883,
3: 0.736,
4: 1.6818181818181819,
5: 0.9795918367346939,
6: 0.5303030303030303,
7: 0.0,
8: 14.523809523809524,
9: 17.07622203811102,
10: 16.334231805929917,
11: 14.918367346938776,
12: 1.4124008651766402,
13: 1.8545081967213115,
14: 1.2862351868732909,
15: 1.4340557275541796,
16: 2.2898674647285167,
17: 2.7108673978065805,
18: 14.311827956989248,
19: 2.871877001921845,
20: 2.8629370629370627}}

这是一个与我的示例相匹配的示例数据集(附图(。

首先,如果你想使用plotly.express你可以只使用

px.line(df,
x='Monthly Production Date',
y='MONTHLY GOR',
color='API/UWI')

参数color允许您为df中的每个不同"API/UWI"设置一行。

如果你想使用plotly.graph_objs你可以做

import plotly.graph_objs as go
fig = go.Figure()
for ts in df.groupby("API/UWI"):
ts = ts[1]
fig.add_trace(go.Scatter(x=ts['Monthly Production Date'],
y=ts['MONTHLY GOR']))
fig.show()

在本例中,您将为每个"API/UWI"添加跟踪。

最新更新