Python甘特图进度条上悬停显示标签
甘特图是一种常见的项目进度展示工具,通过横轴表示时间,纵轴表示任务,用条形图显示任务的完成情况。在Python中,我们可以通过matplotlib库来绘制甘特图,并实现进度条上悬停显示标签的功能。本文将详细介绍如何在Python中实现甘特图进度条上悬停显示标签功能。
1. 准备工作
在开始之前,我们需要安装matplotlib库。如果你还没有安装matplotlib库,可以通过以下命令安装:
pip install matplotlib
2. 绘制基本的甘特图
首先,我们来绘制一个基本的甘特图,以展示任务的进度情况。我们创建一个包含任务名称、开始时间、结束时间以及完成进度的数据集,并使用matplotlib库绘制甘特图。
import matplotlib.pyplot as plt
data = {
'Task 1': ('2022-01-01', '2022-01-10', 0.8),
'Task 2': ('2022-01-05', '2022-01-15', 0.5),
'Task 3': ('2022-01-08', '2022-01-20', 0.3),
}
fig, ax = plt.subplots()
for i, (task, (start, end, progress)) in enumerate(data.items(), 1):
ax.broken_barh([(start, end-start)], (i-0.4, 0.8), facecolors='blue', edgecolor='black', label=task)
plt.xlabel('Date')
plt.ylabel('Tasks')
plt.title('Gantt Chart')
plt.legend()
plt.show()
运行以上代码,我们就可以看到一个基本的甘特图,显示了三个任务的进度情况。每个任务以条形图表示,横轴表示时间,纵轴表示任务,条形图的颜色表示任务的完成进度。
3. 实现进度条上悬停显示标签
为了实现进度条上悬停显示标签的功能,我们需要使用matplotlib库的事件处理器。具体来说,我们可以通过鼠标悬停事件来获取当前鼠标所在位置的坐标,并根据该坐标来确定需要显示的标签内容。
下面是实现进度条上悬停显示标签的完整代码:
import matplotlib.pyplot as plt
from matplotlib.offsetbox import AnchoredText
data = {
'Task 1': ('2022-01-01', '2022-01-10', 0.8),
'Task 2': ('2022-01-05', '2022-01-15', 0.5),
'Task 3': ('2022-01-08', '2022-01-20', 0.3),
}
fig, ax = plt.subplots()
labels = []
for i, (task, (start, end, progress)) in enumerate(data.items(), 1):
bar = ax.broken_barh([(start, end-start)], (i-0.4, 0.8), facecolors='blue', edgecolor='black')
ax.annotate(task, (start, i), color='white', fontsize=10, ha='left', va='center')
labels.append((bar, task))
def hover(event):
for bar, task in labels:
if bar.get_path().contains_point((event.xdata, event.ydata)):
anchored_text = AnchoredText(task, loc='upper left', prop=dict(color='black', fontsize=10))
ax.add_artist(anchored_text)
fig.canvas.draw_idle()
return
fig.canvas.mpl_connect('motion_notify_event', hover)
plt.xlabel('Date')
plt.ylabel('Tasks')
plt.title('Gantt Chart')
plt.show()
在上面的代码中,我们首先定义了一个列表labels
用来保存所有任务的标签。然后通过事件处理器hover
来实现鼠标悬停事件的处理,当鼠标悬停在某个任务的进度条上时,显示该任务的标签。最后,通过fig.canvas.mpl_connect
方法将事件处理器和绘图窗口关联起来。
运行以上代码,当鼠标悬停在任务的进度条上时,就会显示该任务的标签。这样就实现了在Python中绘制甘特图并实现进度条上悬停显示标签的功能。
4. 结论
通过本文的介绍,我们学习了如何在Python中绘制甘特图并实现进度条上悬停显示标签的功能。通过这种方式,我们可以更直观地展示任务的进度情况,方便团队成员进行工作安排和跟踪。