Python甘特图进度条上悬停显示标签

Python甘特图进度条上悬停显示标签

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中绘制甘特图并实现进度条上悬停显示标签的功能。通过这种方式,我们可以更直观地展示任务的进度情况,方便团队成员进行工作安排和跟踪。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程