以下是使用PyQt5绘制K线图的示例代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtChart import QChart, QChartView, QCandlestickSeries, QCandlestickSet
from PyQt5.QtCore import Qt, QPointF, QRectF
from PyQt5.QtGui import QPainter, QColor
class KLineChart(QChartView):
def __init__(self, data):
super().__init__()
self.chart = QChart()
self.chart.legend().hide()
self.chart.setBackgroundRoundness(0)
self.chart.setAnimationOptions(QChart.NoAnimation)
self.chart.createDefaultAxes()
self.chart.axisX().setGridLineVisible(False)
self.chart.axisY().setGridLineVisible(False)
self.chart.axisX().setVisible(False)
self.chart.axisY().setVisible(False)
self.chart.axisX().setLabelsVisible(False)
self.chart.axisY().setLabelsVisible(False)
self.chart.axisX().setRange(0, len(data))
self.chart.axisY().setRange(min(data) * 0.95, max(data) * 1.05)
series = QCandlestickSeries()
for i in range(len(data)):
candlestick_set = QCandlestickSet(data[i][0], data[i][1], data[i][2], data[i][3])
series.append(candlestick_set)
self.chart.addSeries(series)
self.setChart(self.chart)
self.setRenderHint(QPainter.Antialiasing)
self.setMouseTracking(True)
def mouseMoveEvent(self, event):
pos = event.pos()
chart_pos = self.chart.mapToValue(pos)
x = int(chart_pos.x())
y = chart_pos.y()
self.chart.setTitle(f"K线图 - 当前位置:({x}, {y})")
super().mouseMoveEvent(event)
class MainWindow(QMainWindow):
def __init__(self, data):
super().__init__()
self.setWindowTitle("K线图")
self.resize(800, 600)
central_widget = QWidget()
layout = QVBoxLayout(central_widget)
chart_view = KLineChart(data)
layout.addWidget(chart_view)
self.setCentralWidget(central_widget)
if __name__ == "__main__":
app = QApplication([])
data = [[100, 120, 80, 110], [110, 130, 90, 120], [120, 140, 100, 130], [130, 150, 110, 140]]
window = MainWindow(data)
window.show()
app.exec_()
```
这段代码使用了PyQt5的QChart和QCandlestickSeries类来绘制K线图。首先创建一个继承自QChartView的KLineChart类,然后在该类中创建一个QChart对象,并设置一些基本的样式和属性。接着,创建一个QCandlestickSeries对象,并根据提供的数据创建QCandlestickSet对象,并将其添加到QCandlestickSeries中。最后,将QCandlestickSeries添加到QChart中,并将QChart设置为KLineChart的图表。最后,创建一个继承自QMainWindow的MainWindow类,将KLineChart添加到布局中,并将布局设置为MainWindow的中心窗口部件。
CSDN-Ada助手: Java 技能树或许可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java