一、核心代码
新建 pasttime_effect.py 文件
import xlrd
import matplotlib.pyplot as plt
import imageio
def data_gif(cols,xlim_num,duration,instance):#cols展示前几列的数据,xlim_num x轴刻度值,duration两张图片之间的间隔
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
frames = []
xlsx = xlrd.open_workbook(instance.style_file_excel[0])
sheet = xlsx.sheet_by_index(0)
name_list = []
for j in range(1,int(cols)):
name_list.append(sheet.cell_value(0,j))
for i in range(1,sheet.nrows):
row_data_list = []
for j in range(1,int(cols)):
title = sheet.cell_value(i,0)
row_data = sheet.cell_value(i,j)
row_data_list.append(float(row_data))
plt.xlim(0,int(xlim_num))
plt.barh(name_list,row_data_list,color = 'blue')
plt.savefig(instance.style_file_datasave+"/%s.png"%str(title))
plt.close('all')
im = imageio.imread(instance.style_file_datasave+"/%s.png"%str(title))
frames.append(im)
imageio.mimsave(instance.style_file_datasave+'/data_gif.gif',frames,'GIF',duration=duration)
def datagif_fun(instance):
cols = int(instance.part3_input_cols.text())
maxnum = int(instance.part3_input_maxnum.text())
data_gif(cols,maxnum,0.03,instance)
二、UI界面
需要实现自主选择Excel表格
自主选择保存GIF图的位置
自主定义GIF图的行数与x轴坐标的最大刻度值
# 创建一个窗口,定义位置,标题等属性
instance.widget_datagif=QWidget()
instance.widget_datagif.setGeometry(300, 300, 280, 170)
instance.widget_datagif.setWindowTitle('Excel数据动图制作')
# 创建一个按钮,该按钮的父对象为instance.widget_neural_style_transfer
# 当该按钮被点击时执行信号发射函数
instance.button_datagif=QPushButton("开始",instance.widget_datagif)
instance.button_datagif.setGeometry(30, 50, 50, 50)
instance.button_datagif.clicked.connect(instance.datagif_emit)
# 创建一个action,当该action被触发时显示Excel制作图表的窗口
action_datagif_show = QAction('&数据动图制作', instance)
action_datagif_show.triggered.connect(instance.show_datagif_widget)
# 艺术风格迁移选项新增一个action:数据动图制作
tempMenu.addAction(action_datagif_show)
# Excel表格路径
instance.style_file_excel = ""
instance.button_choose_excel = QPushButton("选择excel表格", instance.widget_datagif)
instance.button_choose_excel.clicked.connect(instance.open_file_and_change_name3)
instance.label_excel_file = QLabel(instance.widget_datagif)
instance.label_excel_file.setGeometry(30, 100, 500, 50)
instance.label_excel_file.setText("Excel表格路径")
# 数据动图保存路径
instance.style_file_datasave = ""
instance.button_choose_datasave = QPushButton("选择数据动图保存路径", instance.widget_datagif)
instance.button_choose_datasave.setGeometry(150,0,200,30)
instance.button_choose_datasave.clicked.connect(instance.open_file_and_change_name4)
instance.label_datasave_file = QLabel(instance.widget_datagif)
instance.label_datasave_file.setGeometry(30, 180, 500, 50)
instance.label_datasave_file.setText("Excel表格路径")
#获取表格行数与x轴刻度值
instance.label_excel_cols = QLabel(instance.widget_datagif)
instance.label_excel_cols.setGeometry(30, 260, 200, 50)
instance.label_excel_cols.setText("输入期望的数据动图行数")
instance.part3_input_cols = QLineEdit(instance.widget_datagif)
instance.part3_input_cols.setGeometry(250,260,30,50)
instance.label_excel_maxnum = QLabel(instance.widget_datagif)
instance.label_excel_maxnum.setGeometry(30, 330, 280, 50)
instance.label_excel_maxnum.setText("输入期望的数据动图x轴最大值")
instance.part3_input_maxnum = QLineEdit(instance.widget_datagif)
instance.part3_input_maxnum.setGeometry(300,330,30,50)
m_ui.py
def open_file_and_change_name3(self):
self.style_file_excel = QFileDialog.getOpenFileName(self, '选择文件', self.root_path,"excel(*.xlsx *.xls)")
self.label_excel_file.setText(self.style_file_excel[0])
def open_file_and_change_name4(self):
#self.style_file_transfer=QFileDialog.getOpenFileName(self, '选择文件',self.root_path+"/part3/images")
self.style_file_datasave =QFileDialog.getExistingDirectory(self,'选择文件夹',self.root_path)
self.label_datasave_file.setText(self.style_file_datasave)
def datagif_emit(self):
datagif.datagif_fun(self)
# 显示基于excel数据动图制作操作窗口
def show_datagif_widget(self):
self.widget_datagif.show()