- 전체 소스
더보기
import sys
from PyQt5.QtChart import QChart, QChartView, QCandlestickSeries, QCandlestickSet, QDateTimeAxis, \
QValueAxis
from PyQt5.QtCore import QSize, Qt, QDateTime
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout
class MainScreen(QMainWindow):
def __init__(self, wid, hei):
super().__init__()
self.setWindowTitle("TEST SCREEN") # 프로젝트 타이틀 설정
self.setGeometry(0, 0, int(wid * .5), int(hei * .5)) # 화면 사이즈 설정
self.mainWidget = QWidget() # 메인 위젯 생성
self.mainLayout = QGridLayout(self.mainWidget) # 메인 레이아웃 생성 및 메인 위젯 연결
self.mainLayout.setSpacing(100)
self.setCentralWidget(self.mainWidget) # 메인윈도우 센트럴위젯에 메인 위젯 연결
# 캔들스틱 차트 생성 (타이틀)
self.sample1(0, 0)
# 캔들스틱 차트 (캔들 데이터 삽입)
self.sample2(0, 1)
# 캔들스틱 차트 (캔들 색상 변경)
self.sample3(1, 0)
# 캔들스틱 차트 (X축, Y축 설정)
self.sample4(1, 1)
self.showMaximized()
def sample1(self, row, col):
# 캔들스틱 시리즈 생성
series = QCandlestickSeries()
# 차트 생성
chart = QChart()
chart.legend().hide()
chart.addSeries(series)
chart.createDefaultAxes() # 기본 좌표 생성
chart.setTitle("candlestick Chart") # 타이틀 설정
# 차트 뷰 생성
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing) # 안티알리아싱 설정
self.mainLayout.addWidget(chart_view, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
def sample2(self, row, col):
# 시리즈 생성
series = QCandlestickSeries()
# 타임스탬프
ts = [QDateTime.fromString("2022 07 20 12 00 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 0
,QDateTime.fromString("2022 07 20 12 05 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 1
, QDateTime.fromString("2022 07 20 12 10 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 2
, QDateTime.fromString("2022 07 20 12 15 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 3
, QDateTime.fromString("2022 07 20 12 20 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 4
, QDateTime.fromString("2022 07 20 12 25 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 5
, QDateTime.fromString("2022 07 20 12 30 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 6
, QDateTime.fromString("2022 07 20 12 35 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 7
, QDateTime.fromString("2022 07 20 12 40 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 8
, QDateTime.fromString("2022 07 20 12 45 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch()] # 9
# 캔들 데이터 추가 (시작가, 상한가, 하한가, 종료가, 타임스탬프)
series.append(QCandlestickSet(10, 20, 8, 15, ts[0]))
series.append(QCandlestickSet(15, 30, 15, 25, ts[1]))
series.append(QCandlestickSet(25, 30, 25, 28, ts[2]))
series.append(QCandlestickSet(28, 30, 20, 23, ts[3]))
series.append(QCandlestickSet(23, 25, 15, 19, ts[4]))
series.append(QCandlestickSet(19, 50, 18, 30, ts[5]))
series.append(QCandlestickSet(30, 49, 28, 35, ts[6]))
series.append(QCandlestickSet(35, 39, 34, 38, ts[7]))
series.append(QCandlestickSet(38, 45, 38, 44, ts[8]))
series.append(QCandlestickSet(44, 49, 40, 48, ts[9]))
# 차트 생성
chart = QChart()
chart.legend().hide()
chart.addSeries(series) # 차트에 시리즈 추가
chart.createDefaultAxes() # 기본 좌표 생성
chart.setTitle("candlestick Chart") # 타이틀
# 차트 뷰 생성
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing) # 안티알리아싱 설정
self.mainLayout.addWidget(chart_view, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
def sample3(self, row, col):
# 시리즈 생성
series = QCandlestickSeries()
series.setIncreasingColor(Qt.red) # 시작가 보다 종료가가 클때 색상 설정 (붉은색)
series.setDecreasingColor(Qt.blue) # 시작가 보다 종료가가 작을때 색상 설정 (파란색)
# 타임스탬프
ts = [QDateTime.fromString("2022 07 20 12 00 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 0
, QDateTime.fromString("2022 07 20 12 05 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 1
, QDateTime.fromString("2022 07 20 12 10 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 2
, QDateTime.fromString("2022 07 20 12 15 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 3
, QDateTime.fromString("2022 07 20 12 20 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 4
, QDateTime.fromString("2022 07 20 12 25 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 5
, QDateTime.fromString("2022 07 20 12 30 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 6
, QDateTime.fromString("2022 07 20 12 35 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 7
, QDateTime.fromString("2022 07 20 12 40 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 8
, QDateTime.fromString("2022 07 20 12 45 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch()] # 9
# 캔들 데이터 추가 (시작가, 상한가, 하한가, 종료가, 타임스탬프)
series.append(QCandlestickSet(10, 20, 8, 15, ts[0]))
series.append(QCandlestickSet(15, 30, 15, 25, ts[1]))
series.append(QCandlestickSet(25, 30, 25, 28, ts[2]))
series.append(QCandlestickSet(28, 30, 20, 23, ts[3]))
series.append(QCandlestickSet(23, 25, 15, 19, ts[4]))
series.append(QCandlestickSet(19, 50, 18, 30, ts[5]))
series.append(QCandlestickSet(30, 49, 28, 35, ts[6]))
series.append(QCandlestickSet(35, 39, 34, 38, ts[7]))
series.append(QCandlestickSet(38, 45, 38, 44, ts[8]))
series.append(QCandlestickSet(44, 49, 40, 48, ts[9]))
# 차트 생성
chart = QChart()
chart.legend().hide()
chart.addSeries(series) # 차트에 시리즈 추가
chart.createDefaultAxes() # 기본 좌표 생성
chart.setTitle("candlestick Chart") # 타이틀
# 차트 뷰 생성
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing) # 안티알리아싱 설정
self.mainLayout.addWidget(chart_view, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
def sample4(self, row, col):
# 시리즈 생성
series = QCandlestickSeries()
series.setIncreasingColor(Qt.red) # 시작가 보다 종료가가 클때 색상 설정 (붉은색)
series.setDecreasingColor(Qt.blue) # 시작가 보다 종료가가 작을때 색상 설정 (파란색)
# 타임스탬프
ts = [QDateTime.fromString("2022 07 20 12 00 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 0
, QDateTime.fromString("2022 07 20 12 05 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 1
, QDateTime.fromString("2022 07 20 12 10 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 2
, QDateTime.fromString("2022 07 20 12 15 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 3
, QDateTime.fromString("2022 07 20 12 20 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 4
, QDateTime.fromString("2022 07 20 12 25 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 5
, QDateTime.fromString("2022 07 20 12 30 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 6
, QDateTime.fromString("2022 07 20 12 35 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 7
, QDateTime.fromString("2022 07 20 12 40 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 8
, QDateTime.fromString("2022 07 20 12 45 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch()] # 9
# 캔들 데이터 추가 (시작가, 상한가, 하한가, 종료가, 타임스탬프)
series.append(QCandlestickSet(10, 20, 8, 15, ts[0]))
series.append(QCandlestickSet(15, 30, 15, 25, ts[1]))
series.append(QCandlestickSet(25, 30, 25, 28, ts[2]))
series.append(QCandlestickSet(28, 30, 20, 23, ts[3]))
series.append(QCandlestickSet(23, 25, 15, 19, ts[4]))
series.append(QCandlestickSet(19, 50, 18, 30, ts[5]))
series.append(QCandlestickSet(30, 49, 28, 35, ts[6]))
series.append(QCandlestickSet(35, 39, 34, 38, ts[7]))
series.append(QCandlestickSet(38, 45, 38, 44, ts[8]))
series.append(QCandlestickSet(44, 49, 40, 48, ts[9]))
# X축 설정
self.axis_x = QDateTimeAxis()
self.axis_x.setFormat("hh:mm:ss")
# Y축 설정
self.axis_y = QValueAxis()
self.axis_y.setLabelFormat("%i")
# 차트 생성
chart = QChart()
chart.legend().hide()
chart.addSeries(series) # 차트에 시리즈 추가
chart.addAxis(self.axis_x, Qt.AlignBottom) # x축 좌표 설정
chart.addAxis(self.axis_y, Qt.AlignLeft) # y축 좌표 설정
series.attachAxis(self.axis_x) # 시리즈 X축 좌표 설정
series.attachAxis(self.axis_y) # 시리즈 Y축 좌표 설정
chart.setTitle("candlestick Chart") # 타이틀
# 차트 뷰 생성
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing) # 안티알리아싱 설정
self.mainLayout.addWidget(chart_view, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
if __name__ == '__main__':
app = QApplication(sys.argv)
size: QSize = app.primaryScreen().size() # 모니터 사이즈
main = MainScreen(size.width()/2, size.height())
sys.exit(app.exec_())
1. 캔들스틱 차트 생성 (타이틀 설정)
# 캔들스틱 시리즈 생성
series = QCandlestickSeries()
# 차트 생성
chart = QChart()
chart.legend().hide()
chart.addSeries(series)
chart.createDefaultAxes() # 기본 좌표 생성
chart.setTitle("candlestick Chart") # 타이틀 설정
# 차트 뷰 생성
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing) # 안티알리아싱 설정
self.mainLayout.addWidget(chart_view, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
2. 캔들스틱 차트 (캔들 데이터 삽입)
# 시리즈 생성
series = QCandlestickSeries()
# 타임스탬프
ts = [QDateTime.fromString("2022 07 20 12 00 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 0
,QDateTime.fromString("2022 07 20 12 05 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 1
, QDateTime.fromString("2022 07 20 12 10 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 2
, QDateTime.fromString("2022 07 20 12 15 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 3
, QDateTime.fromString("2022 07 20 12 20 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 4
, QDateTime.fromString("2022 07 20 12 25 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 5
, QDateTime.fromString("2022 07 20 12 30 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 6
, QDateTime.fromString("2022 07 20 12 35 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 7
, QDateTime.fromString("2022 07 20 12 40 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 8
, QDateTime.fromString("2022 07 20 12 45 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch()] # 9
# 캔들 데이터 추가 (시작가, 상한가, 하한가, 종료가, 타임스탬프)
series.append(QCandlestickSet(10, 20, 8, 15, ts[0]))
series.append(QCandlestickSet(15, 30, 15, 25, ts[1]))
series.append(QCandlestickSet(25, 30, 25, 28, ts[2]))
series.append(QCandlestickSet(28, 30, 20, 23, ts[3]))
series.append(QCandlestickSet(23, 25, 15, 19, ts[4]))
series.append(QCandlestickSet(19, 50, 18, 30, ts[5]))
series.append(QCandlestickSet(30, 49, 28, 35, ts[6]))
series.append(QCandlestickSet(35, 39, 34, 38, ts[7]))
series.append(QCandlestickSet(38, 45, 38, 44, ts[8]))
series.append(QCandlestickSet(44, 49, 40, 48, ts[9]))
# 차트 생성
chart = QChart()
chart.legend().hide()
chart.addSeries(series) # 차트에 시리즈 추가
chart.createDefaultAxes() # 기본 좌표 생성
chart.setTitle("candlestick Chart") # 타이틀
# 차트 뷰 생성
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing) # 안티알리아싱 설정
self.mainLayout.addWidget(chart_view, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
3. 캔들스틱 차트 (캔들 색상 변경)
# 시리즈 생성
series = QCandlestickSeries()
# 색상 설정
series.setIncreasingColor(Qt.red) # 시작가 보다 종료가가 클때 색상 설정 (붉은색)
series.setDecreasingColor(Qt.blue) # 시작가 보다 종료가가 작을때 색상 설정 (파란색)
# 타임스탬프
ts = [QDateTime.fromString("2022 07 20 12 00 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 0
, QDateTime.fromString("2022 07 20 12 05 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 1
, QDateTime.fromString("2022 07 20 12 10 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 2
, QDateTime.fromString("2022 07 20 12 15 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 3
, QDateTime.fromString("2022 07 20 12 20 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 4
, QDateTime.fromString("2022 07 20 12 25 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 5
, QDateTime.fromString("2022 07 20 12 30 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 6
, QDateTime.fromString("2022 07 20 12 35 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 7
, QDateTime.fromString("2022 07 20 12 40 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 8
, QDateTime.fromString("2022 07 20 12 45 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch()] # 9
# 캔들 데이터 추가 (시작가, 상한가, 하한가, 종료가, 타임스탬프)
series.append(QCandlestickSet(10, 20, 8, 15, ts[0]))
series.append(QCandlestickSet(15, 30, 15, 25, ts[1]))
series.append(QCandlestickSet(25, 30, 25, 28, ts[2]))
series.append(QCandlestickSet(28, 30, 20, 23, ts[3]))
series.append(QCandlestickSet(23, 25, 15, 19, ts[4]))
series.append(QCandlestickSet(19, 50, 18, 30, ts[5]))
series.append(QCandlestickSet(30, 49, 28, 35, ts[6]))
series.append(QCandlestickSet(35, 39, 34, 38, ts[7]))
series.append(QCandlestickSet(38, 45, 38, 44, ts[8]))
series.append(QCandlestickSet(44, 49, 40, 48, ts[9]))
# 차트 생성
chart = QChart()
chart.legend().hide()
chart.addSeries(series) # 차트에 시리즈 추가
chart.createDefaultAxes() # 기본 좌표 생성
chart.setTitle("candlestick Chart") # 타이틀
# 차트 뷰 생성
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing) # 안티알리아싱 설정
self.mainLayout.addWidget(chart_view, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
4. 캔들스틱 차트 (X축, Y축 설정)
# 시리즈 생성
series = QCandlestickSeries()
series.setIncreasingColor(Qt.red) # 시작가 보다 종료가가 클때 색상 설정 (붉은색)
series.setDecreasingColor(Qt.blue) # 시작가 보다 종료가가 작을때 색상 설정 (파란색)
# 타임스탬프
ts = [QDateTime.fromString("2022 07 20 12 00 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 0
, QDateTime.fromString("2022 07 20 12 05 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 1
, QDateTime.fromString("2022 07 20 12 10 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 2
, QDateTime.fromString("2022 07 20 12 15 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 3
, QDateTime.fromString("2022 07 20 12 20 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 4
, QDateTime.fromString("2022 07 20 12 25 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 5
, QDateTime.fromString("2022 07 20 12 30 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 6
, QDateTime.fromString("2022 07 20 12 35 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 7
, QDateTime.fromString("2022 07 20 12 40 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch() # 8
, QDateTime.fromString("2022 07 20 12 45 00", "yyyy MM dd hh mm ss").toMSecsSinceEpoch()] # 9
# 캔들 데이터 추가 (시작가, 상한가, 하한가, 종료가, 타임스탬프)
series.append(QCandlestickSet(10, 20, 8, 15, ts[0]))
series.append(QCandlestickSet(15, 30, 15, 25, ts[1]))
series.append(QCandlestickSet(25, 30, 25, 28, ts[2]))
series.append(QCandlestickSet(28, 30, 20, 23, ts[3]))
series.append(QCandlestickSet(23, 25, 15, 19, ts[4]))
series.append(QCandlestickSet(19, 50, 18, 30, ts[5]))
series.append(QCandlestickSet(30, 49, 28, 35, ts[6]))
series.append(QCandlestickSet(35, 39, 34, 38, ts[7]))
series.append(QCandlestickSet(38, 45, 38, 44, ts[8]))
series.append(QCandlestickSet(44, 49, 40, 48, ts[9]))
# X축 설정
self.axis_x = QDateTimeAxis()
self.axis_x.setFormat("hh:mm:ss")
# Y축 설정
self.axis_y = QValueAxis()
self.axis_y.setLabelFormat("%i")
# 차트 생성
chart = QChart()
chart.legend().hide()
chart.addSeries(series) # 차트에 시리즈 추가
chart.addAxis(self.axis_x, Qt.AlignBottom) # x축 좌표 설정
chart.addAxis(self.axis_y, Qt.AlignLeft) # y축 좌표 설정
series.attachAxis(self.axis_x) # 시리즈 X축 좌표 설정
series.attachAxis(self.axis_y) # 시리즈 Y축 좌표 설정
chart.setTitle("candlestick Chart") # 타이틀
# 차트 뷰 생성
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing) # 안티알리아싱 설정
self.mainLayout.addWidget(chart_view, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
'PYQT5 > QtChart' 카테고리의 다른 글
[파이썬, PYQT5 - QtChart] LineChart 생성, 데이터 삽입, 타이틀 설정, 색상 변경 (0) | 2022.07.17 |
---|