def creat_gantt(df_data,row):
print(df_data.iloc[row]['项目代号'])
#print(df_data[row['项目代号']])
#print(row['项目代号'],row['确认PCC'],row['晶型盐型确认'],row['预试验样品'],row['预试验样品'],
# row['样品提供/计划日期'],row['制剂稳定性样品'],row['计划IND日期'])
df = pd.read_csv("D:\\UserData\\8100708\\Desktop\\concert.csv")
fig = plt.figure(figsize=(12,3))
ax = fig.add_subplot(111)
# 创建甘特图(使用matplotlib内置方法)
for i, row in df.iterrows():
start = pd.to_datetime(row['start'])
end = pd.to_datetime(row['finish'])
duration = (end - start).days
# 根据任务类型设置颜色
color = 'steelblue' if row['Type'] == 'main' else 'lightgreen'
# 绘制水平条
ax.barh(row['Task'], width=duration, left=start, height=0.6, color=color)
plt.title('', {'fontsize': 14, 'fontweight': 'heavy'})
# === 设置日期刻度 ===
# 获取日期范围
min_date = pd.to_datetime(df['start']).min()
max_date = pd.to_datetime(df['finish']).max()
ax.set_xlim(min_date, max_date)
# 设置主要刻度为月份
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter(' %y年%m月'))
# 设置次要刻度为每周一
week_locator = mdates.WeekdayLocator(byweekday=mdates.MO)
ax.xaxis.set_minor_locator(week_locator)
# 绘制网格线
ax.xaxis.grid(True, which='major', linestyle='-', alpha=0.7, color='gray')
ax.xaxis.grid(True, which='minor', linestyle=':', alpha=0.5, color='lightgray')
# === 修正的交替周背景色 ===
# 获取所有周一的位置(数值格式)
minor_ticks = ax.xaxis.get_minorticklocs()
for i in range(0, len(minor_ticks)-1):
if i % 2 == 0:
# 使用matplotlib数值直接创建区域
ax.axvspan(
minor_ticks[i],
minor_ticks[i+1],
alpha=0.05,
color='blue',
zorder=0 # 确保在底层
)
plt.tight_layout()
plt.show()
fig.savefig('gantt.png', dpi=300, bbox_inches='tight')
print("甘特图已保存为: gantt.png")
******* 台式机 *********
Traceback (most recent call last):
File "d:\移动云\同步盘\500.IT\530.编程\Python_github\2025PD月报\M004_editWord.py", line 420, in <module>
add_word(Word,df_formonth,settings['select'])
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "d:\移动云\同步盘\500.IT\530.编程\Python_github\2025PD月报\M004_editWord.py", line 396, in add_word
creat_gantt(df,row)
~~~~~~~~~~~^^^^^^^^
File "d:\移动云\同步盘\500.IT\530.编程\Python_github\2025PD月报\M004_editWord.py", line 284, in creat_gantt
print(df_data.iloc[row]['项目代号'])
~~~~~~~~~~~~^^^^^
File "D:\Python\Lib\site-packages\pandas\core\indexing.py", line 1191, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Python\Lib\site-packages\pandas\core\indexing.py", line 1743, in _getitem_axis
return self._get_list_axis(key, axis=axis)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "D:\Python\Lib\site-packages\pandas\core\indexing.py", line 1714, in _get_list_axis
return self.obj._take_with_is_copy(key, axis=axis)
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "D:\Python\Lib\site-packages\pandas\core\generic.py", line 4172, in _take_with_is_copy
result = self.take(indices=indices, axis=axis)
File "D:\Python\Lib\site-packages\pandas\core\generic.py", line 4125, in take
indices = np.asarray(indices, dtype=np.intp)
File "D:\Python\Lib\site-packages\pandas\core\series.py", line 1033, in __array__
arr = np.asarray(values, dtype=dtype)
ValueError: invalid literal for int() with base 10: 'TQA3055'