Python 将时间序列数据绘制为堆叠条形图

Python 将时间序列数据绘制为堆叠条形图,python,pandas,matplotlib,bar-chart,Python,Pandas,Matplotlib,Bar Chart,我有一些时间间隔不等的时间序列数据。在每个时间点,我都会将一些值划分为多个不同的类别。我想用表示时间间隔大小的条形图的宽度来绘制这些数据,并将条形图堆叠起来以表示每个不同类别的值 绘制时,条形图的顶部应该看起来像是数据总和(跨类别)的阶跃函数 编辑:添加了mwe。 例如,如果我有3个类别和5个时间点,我的数据将由向量t和矩阵x组成,如下所示 t = [0, 0.1, 0.2, 0.5, 1] x = [[1, 1, 1, 2, 3], [1, 0, 1, 3, 5], [2, 3, 4, 4,

我有一些时间间隔不等的时间序列数据。在每个时间点,我都会将一些值划分为多个不同的类别。我想用表示时间间隔大小的条形图的宽度来绘制这些数据,并将条形图堆叠起来以表示每个不同类别的值

绘制时,条形图的顶部应该看起来像是数据总和(跨类别)的阶跃函数

编辑:添加了mwe。 例如,如果我有3个类别和5个时间点,我的数据将由向量t和矩阵x组成,如下所示

t = [0, 0.1, 0.2, 0.5, 1]
x = [[1, 1, 1, 2, 3], [1, 0, 1, 3, 5], [2, 3, 4, 4, 2]]

编辑:这是用Python编写的。我很乐意使用pandas、matplotlib或任何其他工具来回答问题。

您可以将列表导入pandas数据框,以创建一个-您已经提到过的-步骤函数:

import matplotlib.pyplot as plt
import pandas as pd

t = [0, 0.1, 0.2, 0.5, 1]
x = [[1, 1, 1, 2, 3], [1, 0, 1, 3, 5], [2, 3, 4, 4, 2]]

df = pd.DataFrame(x).T
df.index = t
df.columns = list("ABC")
df = df.cumsum(axis=1)

df.plot(drawstyle="steps-mid")
plt.xticks(df.index)
plt.ylim(0)

plt.show ()
输出:

如果您希望填充区域,您可能希望改为使用fill_-between:

import matplotlib.pyplot as plt
import pandas as pd

t = [0, 0.1, 0.2, 0.5, 1]
x = [[1, 1, 1, 2, 3], [1, 0, 1, 3, 5], [2, 3, 4, 4, 2]]

df = pd.DataFrame(x).T
df.index = t
df.columns = list("ABC")
df = df.cumsum(axis=1)

for y2, y1 in zip(df.columns[::-1], df.columns[1::-1]):
    plt.fill_between(df.index, df[y1], df[y2], step="mid", alpha=0.7, label=y2)
plt.fill_between(df.index, 0, df[y1], step="mid", alpha=0.7, label=y1)
plt.xticks(df.index)
plt.legend()

plt.show ()
输出:

请创建一个包含示例数据的示例。我没有考虑单独绘制每个步骤函数。这正是我想要的——谢谢!当然,你也可以绘制一个堆叠的条形图或柱状图,但我认为计算每个条形的中心和宽度会更加困难。