ChatGPT解答:python代码+PYQT5,实现自定义选择一个表格的数据并根据用户选择,生成折线图、柱状图、饼图、透视图等,生成的文件可以保存至本地,保存的文件支持多种格式,给出完整的代码

ChatGPT解答:

python代码+PYQT5,实现自定义选择一个表格的数据并根据用户选择,生成折线图、柱状图、饼图、透视图等,生成的文件可以保存至本地,保存的文件支持多种格式,给出完整的代码

 

ChatGPTDemo

Based on OpenAI API (gpt-3.5-turbo).

python代码+PYQT5,实现自定义选择一个表格的数据并根据用户选择,生成折线图、柱状图、饼图、透视图等,生成的文件可以保存至本地,保存的文件支持多种格式,给出完整的代码

首先,您需要使用PyQt5创建一个界面,使用户能够选择要使用的表格和生成图表的类型。您可以使用QFileDialog来选择要打开的表格文件,并使用QComboBox或QRadioButton来选择要生成的图表类型。

接下来,您需要使用Pandas库来读取和处理表格数据。您可以使用read_excel或read_csv函数读取表格数据,并使用DataFrame来处理数据。

对于生成图表,您可以使用Matplotlib库。Matplotlib支持生成各种类型的图表,包括折线图、柱状图、饼图和透视图。您可以使用不同的Matplotlib函数来生成不同类型的图表,并使用savefig函数将生成的图表保存为文件。

以下是一个简单的示例代码,用于选择一个Excel表格文件并生成一个折线图:

import pandas as pd
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QFileDialog, QMainWindow, QPushButton, QComboBox, QLabel, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Select Table and Chart Type")self.table_file = Noneself.chart_type = Noneself.initUI()def initUI(self):btn_select_file = QPushButton("Select Table File", self)btn_select_file.clicked.connect(self.select_table_file)lbl_chart_type = QLabel("Select Chart Type", self)cmb_chart_type = QComboBox(self)cmb_chart_type.addItem("Line Chart")cmb_chart_type.addItem("Bar Chart")cmb_chart_type.addItem("Pie Chart")cmb_chart_type.addItem("Pivot Table")cmb_chart_type.currentIndexChanged.connect(self.select_chart_type)btn_generate_chart = QPushButton("Generate Chart", self)btn_generate_chart.clicked.connect(self.generate_chart)layout = QVBoxLayout()layout.addWidget(btn_select_file)layout.addWidget(lbl_chart_type)layout.addWidget(cmb_chart_type)layout.addWidget(btn_generate_chart)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)def select_table_file(self):file_dialog = QFileDialog(self)file_dialog.setNameFilter("Excel Files (*.xlsx)")if file_dialog.exec_() == QFileDialog.Accepted:self.table_file = file_dialog.selectedFiles()[0]def select_chart_type(self, index):self.chart_type = indexdef generate_chart(self):if self.table_file is None:returnif self.chart_type is None:returndf = pd.read_excel(self.table_file)if self.chart_type == 0:plt.plot(df["x"], df["y"])plt.savefig("line_chart.png")elif self.chart_type == 1:plt.bar(df["x"], df["y"])plt.savefig("bar_chart.png")elif self.chart_type == 2:plt.pie(df["y"], labels=df["x"])plt.savefig("pie_chart.png")elif self.chart_type == 3:pivot_table = pd.pivot_table(df, values="y", index=["x"], aggfunc=sum)pivot_table.plot(kind="bar")plt.savefig("pivot_table.png")if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec_()

该代码创建了一个简单的界面,用户可以选择要打开的Excel表格文件和要生成的图表类型。当用户单击“生成图表”按钮时,代码将读取表格数据并根据用户选择生成相应的图表,并将图表保存为文件。您可以根据需要扩展该代码,以支持其他类型的图表和文件格式。

更多实例

以下是一些使用Python和PyQt5创建表格和图表的示例:

  1. 使用QTableWidget创建一个简单的表格:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItemclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Simple Table")self.initUI()def initUI(self):table = QTableWidget(self)table.setColumnCount(3)table.setRowCount(3)table.setItem(0, 0, QTableWidgetItem("Name"))table.setItem(0, 1, QTableWidgetItem("Age"))table.setItem(0, 2, QTableWidgetItem("Gender"))table.setItem(1, 0, QTableWidgetItem("John"))table.setItem(1, 1, QTableWidgetItem("30"))table.setItem(1, 2, QTableWidgetItem("Male"))table.setItem(2, 0, QTableWidgetItem("Jane"))table.setItem(2, 1, QTableWidgetItem("25"))table.setItem(2, 2, QTableWidgetItem("Female"))self.setCentralWidget(table)if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())
  1. 使用QFileDialog选择一个Excel表格文件并在QTableWidget中显示数据:

import sys
import pandas as pd
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QFileDialog, QPushButton, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Select Table File")self.table_file = Noneself.initUI()def initUI(self):btn_select_file = QPushButton("Select Table File", self)btn_select_file.clicked.connect(self.select_table_file)table = QTableWidget(self)btn_load_data = QPushButton("Load Data", self)btn_load_data.clicked.connect(lambda: self.load_data(table))layout = QVBoxLayout()layout.addWidget(btn_select_file)layout.addWidget(table)layout.addWidget(btn_load_data)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)def select_table_file(self):file_dialog = QFileDialog(self)file_dialog.setNameFilter("Excel Files (*.xlsx)")if file_dialog.exec_() == QFileDialog.Accepted:self.table_file = file_dialog.selectedFiles()[0]def load_data(self, table):if self.table_file is None:returndf = pd.read_excel(self.table_file)table.setColumnCount(len(df.columns))table.setRowCount(len(df.index))for i in range(len(df.columns)):table.setHorizontalHeaderItem(i, QTableWidgetItem(df.columns[i]))for i in range(len(df.index)):for j in range(len(df.columns)):table.setItem(i, j, QTableWidgetItem(str(df.iloc[i, j])))if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())
  1. 使用Matplotlib生成一个简单的折线图:

import sys
import numpy as np
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Line Chart")self.initUI()def initUI(self):btn_generate_chart = QPushButton("Generate Chart", self)btn_generate_chart.clicked.connect(self.generate_chart)layout = QVBoxLayout()layout.addWidget(btn_generate_chart)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)def generate_chart(self):x = np.linspace(0, 10, 100)y = np.sin(x)plt.plot(x, y)plt.xlabel("X")plt.ylabel("Y")plt.title("Line Chart")plt.show()if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())
  1. 使用Matplotlib生成一个简单的饼图:

import sys
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Pie Chart")self.initUI()def initUI(self):btn_generate_chart = QPushButton("Generate Chart", self)btn_generate_chart.clicked.connect(self.generate_chart)layout = QVBoxLayout()layout.addWidget(btn_generate_chart)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)def generate_chart(self):labels = ["A", "B", "C", "D"]sizes = [15, 30, 45, 10]plt.pie(sizes, labels=labels, autopct="%1.1f%%")plt.title("Pie Chart")plt.show()if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())

这些示例仅供参考,您可以根据需要进行修改和扩展。

再来5个实例

以下是另外5个使用Python和PyQt5创建表格和图表的示例:

  1. 使用QTableView和QStandardItemModel创建一个简单的表格:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableViewclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Simple Table")self.initUI()def initUI(self):model = QStandardItemModel(3, 3, self)model.setItem(0, 0, QStandardItem("Name"))model.setItem(0, 1, QStandardItem("Age"))model.setItem(0, 2, QStandardItem("Gender"))model.setItem(1, 0, QStandardItem("John"))model.setItem(1, 1, QStandardItem("30"))model.setItem(1, 2, QStandardItem("Male"))model.setItem(2, 0, QStandardItem("Jane"))model.setItem(2, 1, QStandardItem("25"))model.setItem(2, 2, QStandardItem("Female"))table = QTableView(self)table.setModel(model)self.setCentralWidget(table)if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())
  1. 使用QFileDialog选择一个CSV表格文件并在QTableView中显示数据:

import sys
import pandas as pd
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QFileDialog, QPushButton, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Select Table File")self.table_file = Noneself.initUI()def initUI(self):btn_select_file = QPushButton("Select Table File", self)btn_select_file.clicked.connect(self.select_table_file)table = QTableView(self)btn_load_data = QPushButton("Load Data", self)btn_load_data.clicked.connect(lambda: self.load_data(table))layout = QVBoxLayout()layout.addWidget(btn_select_file)layout.addWidget(table)layout.addWidget(btn_load_data)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)def select_table_file(self):file_dialog = QFileDialog(self)file_dialog.setNameFilter("CSV Files (*.csv)")if file_dialog.exec_() == QFileDialog.Accepted:self.table_file = file_dialog.selectedFiles()[0]def load_data(self, table):if self.table_file is None:returndf = pd.read_csv(self.table_file)model = QStandardItemModel(len(df.index), len(df.columns), self)for i in range(len(df.columns)):model.setHeaderData(i, Qt.Horizontal, df.columns[i])for i in range(len(df.index)):for j in range(len(df.columns)):model.setData(model.index(i, j), df.iloc[i, j])table.setModel(model)if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())
  1. 使用Matplotlib生成一个简单的柱状图:

import sys
import numpy as np
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Bar Chart")self.initUI()def initUI(self):btn_generate_chart = QPushButton("Generate Chart", self)btn_generate_chart.clicked.connect(self.generate_chart)layout = QVBoxLayout()layout.addWidget(btn_generate_chart)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)def generate_chart(self):x = np.array(["A", "B", "C", "D"])y = np.array([15, 30, 45, 10])plt.bar(x, y)plt.xlabel("X")plt.ylabel("Y")plt.title("Bar Chart")plt.show()if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())
  1. 使用Matplotlib生成一个简单的散点图:

import sys
import numpy as np
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Scatter Plot")self.initUI()def initUI(self):btn_generate_chart = QPushButton("Generate Chart", self)btn_generate_chart.clicked.connect(self.generate_chart)layout = QVBoxLayout()layout.addWidget(btn_generate_chart)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)def generate_chart(self):x = np.random.rand(100)y = np.random.rand(100)colors = np.random.rand(100)sizes = 1000 * np.random.rand(100)plt.scatter(x, y, c=colors, s=sizes, alpha=0.5)plt.xlabel("X")plt.ylabel("Y")plt.title("Scatter Plot")plt.show()if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())
  1. 使用Plotly生成一个简单的3D散点图:

import sys
import plotly.graph_objs as go
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtWebEngineWidgets import QWebEngineViewclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("3D Scatter Plot")self.initUI()def initUI(self):btn_generate_chart = QPushButton("Generate Chart", self)btn_generate_chart.clicked.connect(self.generate_chart)self.web_view = QWebEngineView(self)layout = QVBoxLayout()layout.addWidget(btn_generate_chart)layout.addWidget(self.web_view)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)def generate_chart(self):x = [1, 2, 3, 4, 5]y = [2, 3, 4, 5, 6]z = [3, 4, 5, 6, 7]trace = go.Scatter3d(x=x, y=y, z=z, mode="markers", marker=dict(size=12, color=z, colorscale="Viridis", opacity=0.8))layout = go.Layout(margin=dict(l=0, r=0, b=0, t=0))fig = go.Figure(data=[trace], layout=layout)self.web_view.setHtml(fig.to_html(include_plotlyjs="cdn"))if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())

希望这些示例对您有所帮助!

更多

以下是另外5个使用Python和PyQt5创建表格和图表的示例:

  1. 使用QTableWidget和Pandas创建一个简单的表格:

import sys
import pandas as pd
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItemclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Simple Table")self.initUI()def initUI(self):df = pd.DataFrame({"Name": ["John", "Jane"], "Age": [30, 25], "Gender": ["Male", "Female"]})table = QTableWidget(self)table.setColumnCount(len(df.columns))table.setRowCount(len(df.index))for i in range(len(df.columns)):table.setHorizontalHeaderItem(i, QTableWidgetItem(df.columns[i]))for i in range(len(df.index)):for j in range(len(df.columns)):table.setItem(i, j, QTableWidgetItem(str(df.iloc[i, j])))self.setCentralWidget(table)if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()sys.exit(app.exec_())
  1. 使用QFileDialog选择一个JSON表格文件并在QTableWidget中显示数据:

import sys
import pandas as pd
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QFileDialog, QPushButton, QVBoxLayout, QWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Select Table File")self.table_file = Noneself.initUI()def initUI(self):btn_select_file = QPushButton("Select Table File", self)btn_select_file.clicked.connect(self.select_table_file)table = QTableWidget(self)btn_load_data = QPushButton("Load Data", self)btn_load_data.clicked.connect(lambda: self.load_data(table))layout = QVBoxLayout()layout.addWidget(btn_select_file)layout.addWidget(table)layout.addWidget(btn_load_data)widget

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49993.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队成员介绍

团队名称:FFF团(Fight!Fight!Fight!) 团队成员介绍:信1705-1任玉琦,信1705-1 刘雨馨,信1705-2 景宇庭 (照片) 景宇庭:年龄20周岁&…

入职难题Git多人合作开发流程

一、创建项目与管理 创建项目和管理项目都是管理账号需要做的事情,如果只是合作开发不进行管理,只需要浏览第二部分的内容即可。 1.创建项目 登录代码托管网站,点击添加项目,如下图所示: 填写相应的项目信息&…

创建Teams组并与成员发起组对话

创建Teams组 点击Teams>Join or create a team>Create team 选择From scratch 选择组类型:private 输入组名: 创建成功,提示添加成员。点击Skip 添加组成员 点击组名右上角的三个点,选择Add member 输入成员姓名或邮箱地址…

用Gmail收取Hotmail里的邮件

提醒:可能会造成邮件内容的泄漏,请自己把握~ 用Gmail收取Hotmail里的邮件 Gmail最近开通了Pop其他邮箱的功能,但是对于没有开通PoP3的Hotmail还是无能为力。Javed Mandary想出了个办法,让你能够收取Hotmail里的邮件&am…

通过Boomerang按计划在Gmail中发送或接收电子邮件(并且我们有邀请)

Have you ever needed to send or receive an email at a different time, and wanted to schedule it? Boomerang is a new beta addon for Google Chrome and Firefox that lets you schedule Gmail around your time and we have 1,000 invites! 您是否曾经想过在其他时间…

宏量资本招聘量化IT工程师交易员分析师(地点:北京)

想找钱多事少离家近的工作, 关注我们吧! 北京宏量资本管理有限公司招聘量化IT工程师&交易员&分析师(薪资面议,地点:北京市朝阳区) 公司介绍: 北京宏量资本有限公司成立于2016年,公司专注…

python数据分析及可视化(十六)金融量化(金融工具、金融分析、Tushare安装使用、双均线分析)

金融介绍 金融就是对现有资源进行重新整合之后,实现价值和利润的等效流通。 比如小明想把手里的资金投资给小李,而小李有好的增值项目但是缺少资金,如果小李的项目创业成功,小明的资金就会增长。 金融工具 在金融市场中可交易的…

月入3万多的Python金融量化分析师究竟多香?

有这样一份工作,平均基本薪资14万美金,不用担心H1B抽签,被华尔街金融巨头抢着要,还对中国留学生青睐有加,它就是被誉为中国留学生进入华尔街金融圈最佳捷径的Quant.无论是高大上的投行还是低奢的PE、Hedge Fund 或Equi…

数据分析之金融数据分析

一 前言 金融业是一个持续发展的行业,金融业正在使用数据分析进行金融,以最大程度地减少管理各种金融活动所需的精力和时间。这些公司正在利用数据分析和机器学习原理的力量。这有助于他们发现金融行业各个领域所需的进步,以重塑其业务战略。…

CnOpenData证券公司(分析师、保代)从业人员信息数据

证券公司(分析师、保代)从业人员信息数据 证券从业人员是指被中国证监会依法批准的证券从业机构正式聘用或与其签订劳务协议的人员。证券从业人员必须按照有关规定在中国证监会取得证券从业人员资格证书后方可在各项证券专业岗位上工作;证券中…

FinChat.io,金融领域的chatgpt

投资股票是一个充满挑战的过程,随着市场的起起伏伏,要抓住每一个机会,同时规避各种风险,这需要投资者具有敏锐的洞察力和快速的决策能力。不过现在有好消息,一款人工智能聊天机器人 FinChat.io 诞生了!它能帮助投资者分析市场,挖掘有潜力的股票,并提供买卖的实时建议 --------…

人工智能、机器学习与深度学习

文章目录 人工智能的发展人工智能应用场景机器学习与深度学习 人工智能的发展 人工智能的产生是在多方面条件共同作用下所实现的。早在数理逻辑初创期,亚里士多德所创立的演绎法,就提出了演绎推理的一般原则,即三段论。在逻辑代数时期&#…

init与zygote的启动流程

文章目录 1.init进程启动过程1.1init进程的入口函数1.1.1创建和启动所需要的文件目录1.1.2对属性进行初始化与启动属性服务1.1.3子进程信号处理函数1.1.4.重启死去的进程1.1.5.解析init.rc配置文件 1.2解析init.rc配置文件1.3解析Service语句1.4init启动Zygote1.4.1start方法 1…

得物前端巡检平台的建设和应用(建设篇)

1.背景 我们所在的效能团队,对这个需求最原始的来源是在一次“小项目”的评审中,增长的业务同学提出来的,目的在于保障前端页面稳定性的同时减少大量测试人力的回归成本。 页面稳定性提升,之前迭代遇见过一些C端的线上问题&…

家人们,谁懂啊,我面试面到了前公司的领导

最近面试,居然面到了刚毕业时的领导。 他认出了我,嬉笑、挑逗的问我现在在这家公司**“混”**的怎么样?还记得当初他待我不薄不? 对于提问,他回答得颠三倒四。 了解到他在之前的几家小公司都过着生活安逸、薪资稳定…

最实用的自媒体爆文采集工具,简单易出爆文

自媒体想要变现,最重要的路径就是获取流量,让文章\视频的阅读量\播放量能够提升,因此,学会利用自媒体工具产出爆款内容就很重要,今天给大家介绍一下,2021年,最实用的自媒体爆文采集工具&#xf…

腾讯大逆转阿里,夺回港股王,马化腾“拍了拍”马云

和“中国首富”这样的个人荣誉相比,相信腾讯创始人马化腾更看重,腾讯公司在江湖中的地位。 2019年11月26日,阿里巴巴集团(9988.HK)在港交所二次上市前,港股“市值王”一直是腾讯,且领先其他公司…

如何添加马云,马化腾,李彦宏的微信

让马化腾出现在你的微信聊天里面 首先声明不是 PS, 我不会 PS 的,这是程序截图: 如下图: 程序源代码: http://git.oschina.net/LittleDY/isWeiXin 我在他的基础上,重新设计了图片和聊天记录。图片来自百度…

马云曾经偶像,终于把阿里留下的 1400 亿败光了

作者:张一弛 来源:金错刀(ID:ijincuodao) 阿里这个金矿,终于被雅虎花光了。 三天前,Altaba宣布将清算和解散,其所持有的阿里巴巴集团股份将对外转让,拟转让的阿里巴巴股份…

如何写一篇法学论文?

我本科是工科专业,千辛万苦跨考到法学,没想到这是噩梦的开端。工科到社科的跨度比想象中大了很多,不再有正确的算式,不再有精细的实验操作,我面对的是一篇篇无从下手的论文。研一上学期的我完全就是个彻头彻尾的学渣&a…