【个人】项目实训 | 利用python制作Excel动图

该博客介绍了一个Python脚本,用于从Excel文件中读取数据并生成动态条形图GIF。用户可以通过UI界面选择Excel文件,设置GIF的行数、x轴最大值及保存路径。核心代码涉及`xlrd`、`matplotlib`和`imageio`库,UI部分使用了`QWidget`、`QPushButton`和`QFileDialog`来实现交互功能。
摘要由CSDN通过智能技术生成


一、核心代码

新建 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()

三、效果

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值