说明
使用Matplotlib画甘特图,思想是使用条形图绘制。
关键点,使用plt.barh(y,data,left=())
y是条形图的位置,data是条形图的大小,left是条形图坐标的距离。
案例如下。
测试代码
import matplotlib.pyplot as plt
import numpy as np
m=[1,2,1,2,2,3,2,1,3,2,3]
t=[5,6,9,2,4,5,4,2,3,5,6]
for i in range(len(m)):
if m[i]==1:
if i==0:
plt.barh(0,t[i])
plt.text(np.sum(t[:i+1])/4,0,'J%s'%(i+1),color="white")
else:
plt.barh(0,t[i],left=(np.sum(t[:i])))
plt.text(np.sum(t[:i])+t[i]/4,0,'J%s'%(i+1),color="white")
elif m[i]==2:
if i==0:
plt.barh(1,t[i])
plt.text(np.sum(t[:i+1])/4,1,'J%s'%(i+1),color="white")
else:
plt.barh(1,t[i],left=(np.sum(t[:i])))
plt.text(np.sum(t[:i])+t[i]/4,1,'J%s'%(i+1),color="white")
else:
if i==0:
plt.barh(2,t[i])
plt.text(np.sum(t[:i+1])/4,2,'J%s'%(i+1),color="white")
else:
plt.barh(2,t[i],left=(np.sum(t[:i])))
plt.text(np.sum(t[:i])+t[i]/4,2,'J%s'%(i+1),color="white")
n=3
plt.yticks(np.arange(n),np.arange(1,n+1))
plt.show()