如何绘制带有 x 轴的 pandas 数据框列,该 x 轴由其他两个给出开始值和结束值的列定义?

我有一个格式为df的数据框:


startTime  endTime  valCol

1            5        6

5            10       7

10           15       9.25

我想使用 matplotlib 或 seaborn 创建一个线图,其中:


x轴是1到15之间的范围

y 轴是valCol

在这里,我希望 x 轴值根据它们所在的范围具有相应的 y 值。本质上,xy 对看起来像:


[(1,6), (2,6), (3,6), (4,6), (5,7), (6,7), (7,7), (8,7), (9,7), (10,9.25),\

(11,9.25), (12,9.25), (13,9.25), (14,9.25)]

这是我到目前为止所尝试的。它似乎不能正常工作(没有给出线图),并且由于 ilocs,中等大小的 df 运行也很慢。


fixedIntervalLength=5

for index,row in df.iterrows(): 

    plt.plot(range(row['startTime'].astype(int), 

    row['endTime'].astype(int)), [row['valCol']]*fixedIntervalLength)

plt.show()


人到中年有点甜
浏览 110回答 2
2回答

慕丝7291255

这是一种涉及制作新 DataFrame 的方法。new_df = pd.DataFrame(data=[    [i, row['valCol']]    for idx, row in df.iterrows()    for i in range(*row[['startTime', 'endTime']].astype(int))], columns=['x', 'y'])new_df.plot(x='x', y='y')plt.show()

扬帆大鱼

这是我的方法:# get min and max timemin_time, max_time = df['startTime'].min(), df['endTime'].max()# set startTime as indexdf.set_index('startTime', inplace=True)# reindex to new time range# if your start/end times are actual timestamp# use pd.daterange(min_time, max_time, freq='your_freq')df = df.reindex(np.arange(min_time, max_time))# ffill valuesdf['valCol'] = df['valCol'].ffill()# plotdf['valCol'].plot()输出:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python