pyqt5读取excel文件并绘折线图代码实现
时间: 2023-07-18 21:33:01 浏览: 244
Python读取Excel表格,并同时画折线图和柱状图的方法
5星 · 资源好评率100%
以下是一个使用PyQt5读取Excel文件并绘制折线图的示例代码:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox
from PyQt5.QtChart import QChart, QChartView, QLineSeries, QValueAxis
from PyQt5.QtCore import Qt
from openpyxl import load_workbook
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("读取Excel文件并绘制折线图")
self.setGeometry(100, 100, 800, 600)
# 添加菜单栏
menubar = self.menuBar()
filemenu = menubar.addMenu('文件')
openfile = filemenu.addAction('打开文件')
openfile.triggered.connect(self.openFile)
# 创建图表
self.chart = QChart()
self.chart.setTitle("折线图")
self.chart.setAnimationOptions(QChart.SeriesAnimations)
# 创建图表视图并设置图表
chartview = QChartView(self.chart, self)
chartview.setRenderHint(QPainter.Antialiasing)
self.setCentralWidget(chartview)
def openFile(self):
# 弹出文件选择对话框
filename, _ = QFileDialog.getOpenFileName(self, "选择文件", "", "Excel 文件 (*.xlsx)")
if filename:
# 加载 Excel 文件
wb = load_workbook(filename=filename, read_only=True)
sheet = wb.active
# 获取数据
data = []
for row in sheet.iter_rows(min_row=2, values_only=True):
data.append(row)
# 绘制折线图
self.chart.removeAllSeries()
for i in range(1, sheet.max_column):
series = QLineSeries()
series.setName(sheet.cell(row=1, column=i+1).value)
for j in range(len(data)):
series.append(j, data[j][i])
self.chart.addSeries(series)
# 设置 X 轴和 Y 轴
axisx = QValueAxis()
axisx.setRange(0, len(data))
axisx.setLabelFormat("%d")
axisx.setTickCount(len(data))
axisx.setTitleText(sheet.cell(row=1, column=1).value)
axisx.setGridLineVisible(True)
self.chart.addAxis(axisx, Qt.AlignBottom)
for series in self.chart.series():
self.chart.setAxisX(axisx, series)
axisy = QValueAxis()
axisy.setRange(sheet.cell(row=2, column=2).value, sheet.cell(row=sheet.max_row, column=2).value)
axisy.setLabelFormat("%.1f")
axisy.setTickCount(10)
axisy.setTitleText(sheet.cell(row=1, column=2).value)
axisy.setGridLineVisible(True)
self.chart.addAxis(axisy, Qt.AlignLeft)
for series in self.chart.series():
self.chart.setAxisY(axisy, series)
# 更新图表视图
self.chart.legend().setVisible(True)
self.chart.legend().setAlignment(Qt.AlignBottom)
chartview = self.centralWidget()
chartview.setChart(self.chart)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwin = MainWindow()
mainwin.show()
sys.exit(app.exec_())
```
该程序首先创建了一个主窗口,并在菜单栏中添加了“打开文件”选项。当用户点击该选项时,程序会弹出文件选择对话框,用户可以选择一个Excel文件。
程序使用openpyxl库读取Excel文件,并将数据存储在一个二维列表中。接下来,程序遍历每一列数据,创建一个QLineSeries对象,并将其添加到图表中。程序还创建了两个QValueAxis对象,用于设置X轴和Y轴。最后,程序将图表视图更新为当前图表。
运行程序后,用户可以选择一个Excel文件并在程序中查看其折线图。
阅读全文