pyqt 在graphview中画柱状图的例子
时间: 2023-08-31 17:28:48 浏览: 162
### 回答1:
可以使用QChart和QBarSeries来绘制柱状图,具体实现可以参考以下代码:
```python
from PyQt5.QtChart import QChart, QChartView, QBarSet, QBarSeries
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建柱状图数据
set = QBarSet("Bar 1")
set1 = QBarSet("Bar 2")
set2 = QBarSet("Bar 3")
set3 = QBarSet("Bar 4")
set4 = QBarSet("Bar 5")
set.append([1, 2, 3, 4, 5])
set1.append([5, 4, 3, 2, 1])
set2.append([, , , , ])
set3.append([3, , , , ])
set4.append([, 3, , , ])
# 创建柱状图系列
series = QBarSeries()
series.append(set)
series.append(set1)
series.append(set2)
series.append(set3)
series.append(set4)
# 创建柱状图
chart = QChart()
chart.addSeries(series)
chart.setTitle("Bar Chart Example")
chart.setAnimationOptions(QChart.SeriesAnimations)
# 创建柱状图视图
chartView = QChartView(chart)
chartView.setRenderHint(QPainter.Antialiasing)
# 设置主窗口
self.setCentralWidget(chartView)
self.resize(800, 600)
self.setWindowTitle("Bar Chart Example")
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
```
这段代码可以在graphview中绘制一个简单的柱状图,你可以根据自己的需要修改数据和样式。
### 回答2:
```
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QGraphicsScene, QGraphicsView, QGraphicsRectItem
from PyQt5.QtGui import QBrush, QColor, QPen
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# 创建布局和视图
layout = QVBoxLayout()
scene = QGraphicsScene()
view = QGraphicsView(scene)
self.setCentralWidget(view)
# 创建柱状图的数据
data = [10, 20, 30, 40, 50]
# 计算柱状图的参数
bar_width = 50
bar_margin = 10
max_height = max(data)
x = 0
# 遍历数据创建柱状图
for value in data:
height = value / max_height * 200 # 计算每根柱子的高度
rect = QGraphicsRectItem(x, 200 - height, bar_width, height) # 创建柱子的矩形对象
rect.setBrush(QBrush(QColor(0, 0, 255))) # 设置柱子的颜色为蓝色
# 设置柱子的边框
pen = QPen(Qt.black)
pen.setWidth(1)
rect.setPen(pen)
# 将柱子添加到场景中
scene.addItem(rect)
# 更新x坐标
x += bar_width + bar_margin
# 设置视图的大小和缩放
view.setSceneRect(0, 0, x, 200)
view.scale(1, -1)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
这个例子演示了如何使用PyQt的GraphView绘制柱状图。首先,创建一个QMainWindow作为主窗口,并使用QVBoxLayout作为布局。然后,创建一个QGraphicsScene和QGraphicsView对象,并将QGraphicsView设置为主窗口的中央窗口部件。
接下来,创建一个含有柱状图数据的列表。然后,通过计算柱状图的参数,例如每根柱子的宽度、间距和最大高度,来生成柱状图。使用for循环遍历数据,在每个迭代中创建一个QGraphicsRectItem矩形对象,并设置其位置、大小和颜色。将矩形对象添加到QGraphicsScene中。
最后,设置QGraphicsView的场景大小,并将其缩放为正常方向。同时,通过创建一个QApplication对象并运行主事件循环,可以使窗口显示出来。
### 回答3:
下面是用PyQt库在GraphView中绘制柱状图的示例代码:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QGraphicsRectItem, QGraphicsView
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建一个GraphicsScene对象和一个GraphicsView对象
self.scene = QGraphicsScene()
self.view = QGraphicsView(self.scene)
# 设置窗口尺寸和标题
self.setGeometry(100, 100, 400, 300)
self.setWindowTitle("柱状图")
# 添加柱状图数据
data = [10, 30, 20, 15, 25]
# 设置柱状图的宽度和间距
width = 30
spacing = 10
# 计算柱状图矩形的位置和大小
x = 0
for i, value in enumerate(data):
rect_height = value
rect_width = width
rect = QGraphicsRectItem(x, self.view.height() - rect_height, rect_width, rect_height)
self.scene.addItem(rect)
x += rect_width + spacing
# 将GraphicsView对象设置为窗口的中央部件
self.setCentralWidget(self.view)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
```
运行以上代码,将会打开一个带有柱状图的窗口。柱状图的高度由`data`列表提供,柱状图的宽度和间隔通过`width`和`spacing`变量进行控制。这个示例使用`QGraphicsRectItem`来绘制柱状图的矩形,并通过`QGraphicsScene`和`QGraphicsView`显示图形。
阅读全文