在没有你的具体数据和数据加载方式的情况下,重现你的问题确实有些困难。然而,根据评论提示,问题可能在于你的数据未经过适当排序,且包含间隙,这可能导致你在图表上看到直线连接点的情况。
我尝试使用示例数据来模拟你的问题:
import pandas as pd
from matplotlib import pyplot as plt
df = pd.DataFrame(
[[1234, '2020-06-01', 1, 84.0],
[1234, '2020-06-01', 2, 86.0],
[1234, '2020-06-01', 3, 88.0],
[1234, '2020-06-01', 4, 90.0],
[1234, '2020-06-01', 5, 91.0],
[1234, '2020-06-01', 6, 94.0],
[1234, '2020-06-01', 6, 80.0], # 注意这里有重复的duration值
[1234, '2020-06-01', 7, 98.0],
[1234, '2020-06-01', 8, 100.0],
[1234, '2020-06-01', 9, 102.0],
[1235, '2020-06-01', 1, 74.0],
[1235, '2020-06-01', 3, 76.0], # 这里跳过了duration=2的数据
[1235, '2020-06-01', 4, 98.0],
[1235, '2020-06-01', 5, 104.0],
[1235, '2020-06-01', 6, 96.0],
[1235, '2020-06-01', 7, 84.0],
[1235, '2020-06-01', 8, 60.0],
[1235, '2020-06-01', 9, 99.0],
[1235, '2020-06-01', 10, 71.0],
[1235, '2020-06-01', 15, 104.0]], # 这里直接跳到了duration=15的数据
columns=['id', 'date', 'duration', 'val1']
)
# 我现在对数据进行了随机重排
df = df.sample(frac=1)
fig, ax = plt.subplots(1, 2, figsize=(20, 8))
# 在左侧的图表中,我仅使用了你提供的代码来绘制原始随机数据
for key, grp in df.groupby(['id', 'date']):
ax[0].plot(grp['duration'], grp['val1'], label=key)
ax[0].legend()
# 在右侧的图表中,在分组之前先对数据进行排序
for key, grp in df.sort_values(['id', 'date', 'duration']).groupby(['id', 'date']):
ax[1].plot(grp['duration'], grp['val1'], label=key)
ax[1].legend()
ax[0].set_xticks([])
ax[1].set_xticks([])
ax[0].set_xlabel('持续时间')
ax[0].set_ylabel('心率')
ax[1].set_xlabel('持续时间')
ax[1].set_ylabel('心率')
plt.show()