【发布时间】:2020-02-12 15:48:39
【问题描述】:
我有以下数据:
我想创建一个甘特图来表示 python 中的时间线。我查找了另一个有类似问题的帖子,但代码对我不起作用(How to get gantt plot using matplotlib),我无法自己解决问题。似乎它与我的“时间”值的数据类型有关。这是代码本身:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('zpp00141_new.csv')
df.dropna(subset=['Latest finish / time', 'Earl. start / time'])
#error when I try to change data type of the columns to int
df["Latest finish / time"]= df["Latest finish / time"].astype(int)
df["Earl. start / time"]= df["Earl. start / time"].astype(int)
#error below with data types
df["Diff"] = df['Latest finish / time'] - df['Earl. start / time']
color = {"In":"turquoise", "Out":"crimson"}
fig,ax=plt.subplots(figsize=(6,3))
labels=[]
for i, task in enumerate(df.groupby("Operation/Activity")):
labels.append(task[0])
for r in task[1].groupby("Operation short text"):
data = r[1][["Earl. start / time", "Diff"]]
ax.broken_barh(data.values, (i-0.4,0.8), color=color[r[0]] )
ax.set_yticks(range(len(labels)))
ax.set_yticklabels(labels)
ax.set_xlabel("time [ms]")
plt.tight_layout()
plt.show()
我尝试将列的数据类型从对象转换为“int”,但它提示另一个错误:“invalid literal for int() with base 10: '9:22:00 AM'”。我真的很感激在这件事上的任何帮助,因为我对 python 编程很陌生。如果有一种更简单、更好的方法来表示我的需要,如果您能提供任何提示,那将会很有帮助。基本上,我需要一个甘特图来表示从早上 7 点到下午 4:30 的“时间轴”上的每个活动,并将“现在”时间反映为图表上的一条垂直线,以指示我们现在所处的位置。
【问题讨论】:
-
也许this example 可以帮忙?
-
感谢您提供此示例,但我的时间格式不同:h:min:sec AM/PM。我需要图表来显示从早上 7 点到下午 4:30 的时间线,以每小时为间隔。作为数据输入,我使用 csv 文件,其中包含按特定操作/活动分类的开始时间和结束时间。如果您不介意告诉我,我将如何针对这些要求修改代码?
标签: python pandas dataframe matplotlib