import streamlit as st import pandas as pd import seaborn as sns import matplotlib.pyplot as plt st.title('护士排班 NRP problem') st.subheader('请输入您的护士编号,即可获得您本周的排班表') res = st.number_input('',0,100) #用于显示数字输入小部件 if res: res = int(res) df = pd.read_excel('result.xlsx') key1 = df['a'].to_list() key = [eval(k) for k in key1] value = df['b'].to_list() dic = dict(zip(key,value)) J = list(range(7)) # 星期几 1 2 3 4 5 6 7 I = list(range(6)) # 班次 {1:6-10,2:10-14,3:14-18,4:18-22,5:22-2,6:2-6} nurse = [[0 for col in J] for row in I] for k,v in dic.items(): if k[2] == res: nurse[k[0]][k[1]] += v week = ['Mon','Tus','Wed','Ths','Fri','Sat','Sun'] table = pd.DataFrame(nurse, columns= week) #将字典转换成为数据框 table.index = ['2:00-6:00','6:00-10:00','10:00-14:00','14:00-18:00','18:00-22:00','22:00-2:00'] print(f'nurse{res}\'s table') plt.rcParams.update({"font.size":15})#此处必须添加此句代码方可改变标题字体大小 plt.figure(figsize=(12,8)) ax = sns.heatmap(table,linewidths=0.05,linecolor='black', cmap="YlGnBu") ax.xaxis.tick_top() ax.tick_params(axis='both', which='both', length=0) # 删除横纵坐标轴上的刻度线 plt.yticks( rotation=0) plt.savefig(f'timetable_{res}.png',dpi=600) st.caption('请查收您的排班表') #用于写字幕 st.image(f'timetable_{res}.png') #用于显示图像 with open(f"timetable_{res}.png", "rb") as file: btn = st.download_button( label="下载排班表", data=file, file_name="timetable.png", )