在 python 中使用长格式数据创建时间序列图?

Posted

技术标签:

【中文标题】在 python 中使用长格式数据创建时间序列图?【英文标题】:Creating a time-series plot with data in long format in python? 【发布时间】:2021-06-15 08:46:25 【问题描述】:

我在 pandas DataFrame 中有时间序列数据,如下所示:

ID  HeartRate
1      120
1      118
1      115
2      98
2      110
2      112
3      128
3      115
3      90

我想为每个不同的 ID(即患者)创建一个单独的线图。我怎样才能最好地使用matplotlib呢?我需要创建一个“时间间隔”变量吗?


df = my_data[['ID', 'HR']].copy() ## creating a new "mini" dataframe from the larger one that I've got. 

n_ids = df.ID.unique().size 
n_cols = int(n_ids ** 0.5) 
n_rows = int(n_ids + n_ids % n_cols) 
fig, axes = plt.subplots(n_rows, n_cols) 
for i, (ids, hr) in enumerate(df.groupby('ID')['HR']): 
hr.plot(ax=axes[i], title=f"ID:idx") 
fig.tight_layout()

但是,当我收到以下错误时:

'numpy.ndarray' object has no attribute 'get_figure'

【问题讨论】:

您愿意使用pandas 库吗? 是的,很抱歉忘记提及我的数据集已作为 pandas 数据框导入 这能回答你的问题吗? Plotting grouped data in same plot using Pandas 分开是指不同ax上的每个ID? 我不认为它确实如此,因为据我所知,他们正在那里的一个地块上绘制不同的不同单位,而我想做的是相反的(除非我错过了线程中有东西!) 【参考方案1】:

只需 groupby 并绘制它:

df.groupby('ID')['HeartRate'].plot()

或者使用多个轴,而不用担心(至少这么多)类别的大小:

n_ids = df.ID.unique().size
n_cols = int(n_ids ** 0.5)
n_rows = n_cols + (1 if n_ids % n_cols else 0)                   
fig, axes = plt.subplots(n_rows, n_cols)
axes = axes.ravel()
for i, (idx, series) in enumerate(df.groupby('ID')['HeartRate']):
    series.plot(ax=axes[i], title=f"ID:idx")
fig.tight_layout()

输出:

【讨论】:

但是运行这段代码,所有的折线图都在示例图中。相反,我试图为每个不同的 ID 创建一个不同的图。 不,我为每个情节版本添加了一个 ID。 是的,这正是我想要的——抱歉,我可能第一次错过了那段代码。但是,当我运行代码时,出现以下错误:AttributeError: 'numpy.ndarray' object has no attribute 'get_figure' - 知道为什么会发生这种情况吗? 你能发布确切的代码吗?您可能会将阵列与斧头混合使用。无论如何,如果你已经在我展示给你的代码中拥有它,为什么还要get_figure 比如axes[0].get_figure()就可以了。

以上是关于在 python 中使用长格式数据创建时间序列图?的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?

如何从 R 中的 rasterbrick 对象创建长格式数据框

R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)

R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)

R语言ggplot2可视化:应用pivot_longer函数将数据从宽格式转换为长格式为dataframe的每一列绘制密度图和直方图(堆叠)

在 Python Pandas 中以长格式附加列表元素