def __init__(self, host, history, history_size, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.host = host self.history = history self.history_size = history_size self.setupUi(self) self.setWindowFlag(Qt.WindowStaysOnTopHint) self.position_to_dock() self.series_delay = QLineSeries() self.series_loss = QLineSeries() self.axis_X = QDateTimeAxis() # pylint: disable=invalid-name self.axis_X.setTickCount(3) self.axis_X.setFormat("HH:mm") self.axis_X.setTitleText("Time") self.chart = QChart() self.chart.addSeries(self.series_delay) self.chart.addSeries(self.series_loss) self.chart.setTitle(f"Connection to {self.host}") self.init_series(self.series_delay, "Delay ms") self.init_series(self.series_loss, "Loss %") self.chart.legend().setVisible(False) self.chart.legend().setAlignment(Qt.AlignBottom) self.chart.layout().setContentsMargins(0, 0, 0, 0) self.chart.setBackgroundRoundness(0) self.chart.setMargins(QMargins(0, 0, 0, 0)) self.chartWidget.setChart(self.chart) self.chartWidget.setRenderHint(QPainter.Antialiasing)
def chart_init(self): self.chart = QChart() self.series = QScatterSeries() #设置曲线名称 self.series.setName("实时数据") self.series.setColor(QColor(255,0,0)) self.series.setMarkerSize(20.0) self.series.setPen(QPen(QtCore.Qt.PenStyle.NoPen)) #把曲线添加到QChart的实例中 self.chart.addSeries(self.series) #声明并初始化X轴,Y轴 self.dtaxisX = QDateTimeAxis() self.vlaxisY = QValueAxis() #设置坐标轴显示范围 self.dtaxisX.setMin(QDateTime.currentDateTime().addSecs(-300*1)) self.dtaxisX.setMax(QDateTime.currentDateTime().addSecs(0)) self.vlaxisY.setMin(0) self.vlaxisY.setMax(1500) #设置X轴时间样式 self.dtaxisX.setFormat("MM月dd hh:mm:ss") #设置坐标轴上的格点 self.dtaxisX.setTickCount(6) self.vlaxisY.setTickCount(11) #设置坐标轴名称 self.dtaxisX.setTitleText("时间") self.vlaxisY.setTitleText("量程") #设置网格不显示` #把坐标轴添加到chart中 self.chart.addAxis(self.dtaxisX,Qt.AlignBottom) self.chart.addAxis(self.vlaxisY,Qt.AlignLeft) #把曲线关联到坐标轴 self.series.attachAxis(self.dtaxisX) self.series.attachAxis(self.vlaxisY) self.setChart(self.chart)
def __init__(self, *args, **kwargs): super(CpuLineChart, self).__init__(*args, **kwargs) self.m_count = 10 # 隐藏图例 self.legend().hide() self.m_series = QSplineSeries(self) # 设置画笔 self.m_series.setPen(QPen(QColor('#3B8CFF'), 2, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)) self.addSeries(self.m_series) # x轴 self.m_axisX = QDateTimeAxis(self) self.m_axisX.setTickCount(self.m_count + 1) # 设置刻度数量 self.m_axisX.setFormat('hh:mm:ss') # 设置时间显示格式 now = QDateTime.currentDateTime() # 前10秒到现在 self.m_axisX.setRange(now.addSecs(-self.m_count), now) self.addAxis(self.m_axisX, Qt.AlignBottom) self.m_series.attachAxis(self.m_axisX) # y轴 self.m_axisY = QValueAxis(self) self.m_axisY.setLabelFormat('%d') # 设置文本格式 self.m_axisY.setMinorTickCount(4) # 设置小刻度线的数目 self.m_axisY.setTickCount(self.m_count + 1) self.m_axisY.setRange(0, 100) self.addAxis(self.m_axisY, Qt.AlignLeft) self.m_series.attachAxis(self.m_axisY) # 填充11个初始点,注意x轴 需要转为秒的时间戳 self.m_series.append( [QPointF(now.addSecs(-i).toMSecsSinceEpoch(), 0) for i in range(self.m_count, -1, -1)]) # 定时器获取数据 self.m_timer = QTimer() self.m_timer.timeout.connect(self.update_data) self.m_timer.start(1000)
def chart_init(self): self.chart = QChart() self.series = QSplineSeries() #设置曲线名称 self.series.setName("实时数据") #把曲线添加到QChart的实例中 self.chart.addSeries(self.series) #声明并初始化X轴,Y轴 self.dtaxisX = QDateTimeAxis() self.vlaxisY = QValueAxis() #设置坐标轴显示范围 self.dtaxisX.setMin(QDateTime.currentDateTime().addSecs(-300 * 1)) self.dtaxisX.setMax(QDateTime.currentDateTime().addSecs(0)) self.vlaxisY.setMin(0) self.vlaxisY.setMax(1500) #设置X轴时间样式 self.dtaxisX.setFormat("MM月dd hh:mm:ss") #设置坐标轴上的格点 self.dtaxisX.setTickCount(6) self.vlaxisY.setTickCount(11) #设置坐标轴名称 self.dtaxisX.setTitleText("时间") self.vlaxisY.setTitleText("量程") #设置网格不显示 self.vlaxisY.setGridLineVisible(False) #把坐标轴添加到chart中 self.chart.addAxis(self.dtaxisX, Qt.AlignBottom) self.chart.addAxis(self.vlaxisY, Qt.AlignLeft) #把曲线关联到坐标轴 self.series.attachAxis(self.dtaxisX) self.series.attachAxis(self.vlaxisY) self.setChart(self.chart)
def chart_init(self,s_key): self.chart = QChart() self.x_Aix = QDateTimeAxis()#定义x轴,实例化 #self.x_Aix.setRange(52665,52765) #self.x_Aix.setLabelFormat("%0.2f") self.x_Aix.setFormat("hh:mm:ss") self.x_Aix.setTickCount(6) #self.x_Aix.setTickCount(6) #self.x_Aix.setMinorTickCount(0) self.y_Aix = QValueAxis()#定义y轴 #self.y_Aix.setRange(-50,50) self.y_Aix.setLabelFormat("%0.2f") #self.y_Aix.setTickCount(6) self.y_Aix.setMinorTickCount(0) self.chart.addAxis(self.x_Aix,Qt.AlignBottom) self.chart.addAxis(self.y_Aix,Qt.AlignLeft) self.s_key = s_key self.series_list={} color_list = [QColor("blue"),QColor("green"),QColor("red"),QColor(152,245,255),QColor(84,255,159),QColor(255,193,193)] for k,c in zip(self.s_key,color_list): self.q_point[k] = queue.Queue() self.series_list[k] = QScatterSeries() self.series_list[k].setMarkerSize(9.0) self.series_list[k].setColor(QColor(c)) self.series_list[k].setPen(QPen(QtCore.Qt.PenStyle.NoPen)) self.chart.addSeries(self.series_list[k]) self.series_list[k].setName(k) self.series_list[k].attachAxis(self.x_Aix) self.series_list[k].attachAxis(self.y_Aix) self.setChart(self.chart)
def __iniChart(self): self.chart = QChart() #创建 Chart self.chart.setTitle("股票日线图") self.chart.setTheme( QChart.ChartThemeBlueCerulean ) #ChartThemeBlueCerulean, ChartThemeQt,ChartThemeBlueNcs,ChartThemeDark self.ui.chartView.setChart(self.chart) #Chart添加到ChartView ## X 轴是QDateTimeAxis self.__axisX = QDateTimeAxis() dateFormat = self.ui.comboDateFormat.currentText() #如"MM-dd" self.__axisX.setFormat(dateFormat) #标签格式 self.__axisX.setTickCount(10) #主分隔个数 self.__axisX.setTitleText("日期") #标题 dateMin = QDateTime.fromString("2018-01-01", "yyyy-MM-dd") self.__axisX.setMin(dateMin) dateMax = dateMin.addDays(150) self.__axisX.setMax(dateMax) self.chart.addAxis(self.__axisX, Qt.AlignBottom) ## Y 轴是 QValueAxis self.__axisY = QValueAxis() self.__axisY.setTitleText("Value") self.__axisY.setRange(0, 20) self.__axisY.setTickCount(5) self.__axisY.setLabelFormat("%.2f") #标签格式 self.chart.addAxis(self.__axisY, Qt.AlignLeft)
def __init__(self): QChartView.__init__(self) self.chart = QChart() self.candleSeries = QCandlestickSeries(self) self.candleSeries.setIncreasingColor(Qt.blue) self.candleSeries.setBodyOutlineVisible(False) self.candleSeries.setDecreasingColor(Qt.red) self.candleSeries.setMaximumColumnWidth(20) self.candleSeries.clicked.connect(lambda set: print(set.high())) self.xAxis = QDateTimeAxis() self.xAxis.setTickCount(10) self.xAxis.setFormat("h:mm") self.yAxis = QValueAxis() for candle in data: self.addCandle( self.get_integer_price(candle[0]), self.get_integer_price(candle[1]), self.get_integer_price(candle[2]), self.get_integer_price(candle[3]), datetime.strptime(candle[4], '%Y%m%d%H%M%S').timestamp() * 1000) self.chart.addSeries(self.candleSeries) self.setChart(self.chart) self.chart.setAxisX(self.xAxis, self.candleSeries) self.chart.setAxisY(self.yAxis, self.candleSeries) self.chart.legend().setVisible(False)
def initSeries(self, chartTypes="Bar"): self.chartTypes = chartTypes axisX = QDateTimeAxis() axisX.setFormat("yyyy-MM-dd") self.zoomSeries = QLineSeries(self.chart()) self.chart().addSeries(self.zoomSeries) self.chart().setAxisY(QValueAxis(), self.zoomSeries) self.chart().setAxisX(axisX, self.zoomSeries) self.initView()
def __init__(self, parent=None, ticker="BTC"): super().__init__(parent) uic.loadUi("resource/chart.ui", self) self.ticker = ticker self.viewLimit = 128 self.priceData = QLineSeries() self.priceChart = QChart() self.priceChart.addSeries(self.priceData) self.priceChart.legend().hide() # ----------------- 추 가 ------------------ axisX = QDateTimeAxis() axisX.setFormat("hh:mm:ss") axisX.setTickCount(4) dt = QDateTime.currentDateTime() axisX.setRange(dt, dt.addSecs(self.viewLimit)) axisY = QValueAxis() axisY.setVisible(False) self.priceChart.addAxis(axisX, Qt.AlignBottom) self.priceChart.addAxis(axisY, Qt.AlignRight) self.priceData.attachAxis(axisX) self.priceData.attachAxis(axisY) self.priceChart.layout().setContentsMargins(0, 0, 0, 0) # ------------------------------------------ self.priceView.setChart(self.priceChart) self.priceView.setRenderHints(QPainter.Antialiasing)
def __init__(self, parent=None, ticker="BTCUSDT"): super().__init__(parent) uic.loadUi("resource/chart.ui", self) self.ticker = ticker self.viewLimit = 10 self.tm = [] self.priceData = QCandlestickSeries() self.priceData.setDecreasingColor(Qt.red) self.priceData.setIncreasingColor(Qt.green) self.priceChart = QChart() self.priceChart.addSeries(self.priceData) self.priceChart.legend().hide() axisX = QDateTimeAxis() axisX.setFormat("hh:mm:ss") axisX.setTickCount(4) dt = QDateTime.currentDateTime() axisX.setRange(dt, dt.addSecs(self.viewLimit)) axisY = QValueAxis() axisY.setVisible(False) self.priceChart.addAxis(axisX, Qt.AlignBottom) self.priceChart.addAxis(axisY, Qt.AlignRight) self.priceData.attachAxis(axisX) self.priceData.attachAxis(axisY) self.priceChart.layout().setContentsMargins(0, 0, 0, 0) self.priceView.setChart(self.priceChart) self.priceView.setRenderHints(QPainter.Antialiasing) self.pw = PriceWorker(ticker) self.pw.dataSent.connect(self.appendData) self.pw.start()
class ChartTab(QChartView): def __init__(self): QChartView.__init__(self) self.chart = QChart() self.candleSeries = QCandlestickSeries(self) self.candleSeries.setIncreasingColor(Qt.blue) self.candleSeries.setBodyOutlineVisible(False) self.candleSeries.setDecreasingColor(Qt.red) self.candleSeries.setMaximumColumnWidth(20) self.candleSeries.clicked.connect(lambda set: print(set.high())) self.xAxis = QDateTimeAxis() self.xAxis.setTickCount(10) self.xAxis.setFormat("h:mm") self.yAxis = QValueAxis() for candle in data: self.addCandle( self.get_integer_price(candle[0]), self.get_integer_price(candle[1]), self.get_integer_price(candle[2]), self.get_integer_price(candle[3]), datetime.strptime(candle[4], '%Y%m%d%H%M%S').timestamp() * 1000) self.chart.addSeries(self.candleSeries) self.setChart(self.chart) self.chart.setAxisX(self.xAxis, self.candleSeries) self.chart.setAxisY(self.yAxis, self.candleSeries) self.chart.legend().setVisible(False) def mouseMoveEvent(self, QMouseEvent): chartValues = self.chart.mapToValue(QMouseEvent.pos()) price = chartValues.y() print(price) def addCandle(self, open, close, high, low, timestamp): candlestickSet = QCandlestickSet() candlestickSet.setOpen(open) candlestickSet.setClose(close) candlestickSet.setHigh(high) candlestickSet.setLow(low) candlestickSet.setTimestamp(timestamp) pen = QPen() candlestickSet.setPen(pen) self.candleSeries.append(candlestickSet) def get_integer_price(self, str_price): return int(str_price.strip()[1:])
def create_linechart(self): self.chart = QChart() self.chart.legend().hide() self.series = QLineSeries() self.axisValue = QValueAxis() self.axisCurrentTime = QValueAxis() self.axisTime = QDateTimeAxis() self.axisTime.setFormat("hh:mm") self.chartview = QChartView(self.chart, self.groupBox) self.chartview.resize(540, 460) self.chartview.move(0, 0) self.chartview.setRenderHint(QPainter.Antialiasing)
def clear(self): self._chart = QChart() self.setChart(self._chart) self.setRenderHint(QPainter.Antialiasing) self._allowHideSeries = True self.axisX = QDateTimeAxis() self.maxx = None self.minx = None self.axisY = QValueAxis() self.maxy = None self.miny = None self.series = [] self.chart().legend().hide() self.popup = MyPopup(self)
def __init__(self, name): self.chart_volume_view = QChartView() self.chart_volume_view.chart().setLocalizeNumbers(True) self.volume_series = QCandlestickSeries() self.volume_time_axis = QDateTimeAxis() self.volume_time_axis.setFormat('h:mm') self.volume_axis = QValueAxis() self.volume_average_series = QLineSeries() self.chart_volume_view.chart().addSeries(self.volume_series) self.chart_volume_view.chart().addSeries(self.volume_average_series) self.chart_volume_view.chart().addAxis(self.volume_time_axis, Qt.AlignBottom) self.chart_volume_view.chart().addAxis(self.volume_axis, Qt.AlignLeft) self.chart_volume_view.chart().legend().hide() self.chart_volume_view.setRenderHint(QPainter.Antialiasing)
def __init__(self, name): self.name = name self.chart_view = QChartView() self.price_time_axis = QDateTimeAxis() self.price_time_axis.setFormat('h:mm') self.price_axis = QValueAxis() self.candle_stick_series = QCandlestickSeries() self.candle_stick_series.setIncreasingColor(Qt.red) self.candle_stick_series.setDecreasingColor(Qt.blue) self.moving_average_series = QLineSeries() self.top_edge_series = QScatterSeries() self.bottom_edge_series = QScatterSeries() self.trend_lines = [] self.short_top_trend_series = QLineSeries() self.short_bottom_trend_series = QLineSeries() self.long_top_trend_series = QLineSeries() self.long_bottom_trend_series = QLineSeries() self.trend_lines.append(self.short_top_trend_series) self.trend_lines.append(self.short_bottom_trend_series) self.trend_lines.append(self.long_top_trend_series) self.trend_lines.append(self.long_bottom_trend_series) self.chart_view.chart().addSeries(self.candle_stick_series) self.chart_view.chart().addSeries(self.moving_average_series) self.chart_view.chart().addSeries(self.top_edge_series) self.chart_view.chart().addSeries(self.bottom_edge_series) self.chart_view.chart().addSeries(self.short_top_trend_series) self.chart_view.chart().addSeries(self.long_top_trend_series) self.chart_view.chart().addSeries(self.short_bottom_trend_series) self.chart_view.chart().addSeries(self.long_bottom_trend_series) self.chart_view.chart().addAxis(self.price_time_axis, Qt.AlignBottom) self.chart_view.chart().addAxis(self.price_axis, Qt.AlignLeft) self.chart_view.chart().legend().hide() self.chart_view.setRenderHint(QPainter.Antialiasing) self.set_marker_color() self.set_trend_line_pen()
def chart_init(self): """ 初始化 GPU 折线图 :return: """ # self.gpu_info_chart._chart = QChart(title="折线图堆叠") # 创建折线视图 self.gpu_info_chart._chart = QChart() # 创建折线视图 # chart._chart.setBackgroundVisible(visible=False) # 背景色透明 self.gpu_info_chart._chart.setBackgroundBrush(QBrush( QColor("#FFFFFF"))) # 改变图背景色 # 设置曲线名称 self.series.setName("GPU Utilization") # 把曲线添加到QChart的实例中 self.gpu_info_chart._chart.addSeries(self.series) # 声明并初始化X轴,Y轴 self.dtaxisX = QDateTimeAxis() self.vlaxisY = QValueAxis() # 设置坐标轴显示范围 self.dtaxisX.setMin(QDateTime.currentDateTime().addSecs(-300 * 1)) self.dtaxisX.setMax(QDateTime.currentDateTime().addSecs(0)) self.vlaxisY.setMin(0) self.vlaxisY.setMax(100) # 设置X轴时间样式 self.dtaxisX.setFormat("hh:mm:ss") # 设置坐标轴上的格点 self.dtaxisX.setTickCount(5) self.vlaxisY.setTickCount(10) # 设置坐标轴名称 self.dtaxisX.setTitleText("Time") self.vlaxisY.setTitleText("Percent") # 设置网格不显示 self.vlaxisY.setGridLineVisible(False) # 把坐标轴添加到chart中 self.gpu_info_chart._chart.addAxis(self.dtaxisX, Qt.AlignBottom) self.gpu_info_chart._chart.addAxis(self.vlaxisY, Qt.AlignLeft) # 把曲线关联到坐标轴 self.series.attachAxis(self.dtaxisX) self.series.attachAxis(self.vlaxisY) # 生成 折线图 self.gpu_info_chart.setChart(self.gpu_info_chart._chart)
def __init__(self): super().__init__() series = QLineSeries() for date, value in DATA: date_value = QDateTime(*date, 0, 0).toMSecsSinceEpoch() series.append(date_value, value) chart = QChart() chart.setTheme(QChart.ChartThemeDark) chart.setTitle("Line Chart with Date Example") chart.setAnimationOptions(QChart.SeriesAnimations) chart.addSeries(series) chart.legend().hide() axisX = QDateTimeAxis() axisX.setFormat("dd/MM/yyyy") axisX.setTitleText('Date') chart.addAxis(axisX, Qt.AlignBottom) series.attachAxis(axisX) axisY = QValueAxis() axisY.setTitleText('Value') chart.addAxis(axisY, Qt.AlignLeft) series.attachAxis(axisY) chart_view = QChartView() chart_view.setChart(chart) chart_view.setRenderHint(QPainter.Antialiasing) self.setCentralWidget(chart_view)
class BaseTimedGraph(QChartView): def __init__(self, chart=None, parent=None): super(BaseTimedGraph, self).__init__(parent) self.setObjectName('BaseGraph') self.seriesPurgedT = None self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.chart = chart if chart else QChart() self.setRenderHint(QPainter.Antialiasing) self.axisX = QDateTimeAxis() self.axisX.setTickCount(5) self.axisX.setFormat('hh:mm:ss') self.axisX.setTitleText('Time') self.chart.addAxis(self.axisX, Qt.AlignBottom) self.axisY = QValueAxis() self.axisY.setLabelFormat('%i') self.axisY.setMin(0) self.axisY.setMax(1024) self.chart.addAxis(self.axisY, Qt.AlignLeft) def removeOldSeries(self, series, before: int): for point in series.pointsVector(): if point.x() < before: series.remove(point) async def onBwStats(self, stats): pass
def update_axes(self): # Get and remove all axes for axis in self.chart.axes(): self.chart.removeAxis(axis) # Create new axes # Create axis X axisx = QDateTimeAxis() axisx.setTickCount(5) axisx.setFormat("dd MMM yyyy hh:mm:ss") axisx.setTitleText("Date") self.chart.addAxis(axisx, Qt.AlignBottom) # axisX.rangeChanged.connect(self.axis_range_changed) """axisX = QValueAxis() axisX.setTickCount(10) axisX.setLabelFormat("%li") axisX.setTitleText("Seconds") self.chart.addAxis(axisX, Qt.AlignBottom)""" # axisX.rangeChanged.connect(self.axis_range_changed) # Create axis Y axisY = QValueAxis() axisY.setTickCount(5) axisY.setLabelFormat("%.3f") axisY.setTitleText("Values") self.chart.addAxis(axisY, Qt.AlignLeft) # axisY.rangeChanged.connect(self.axis_range_changed) ymin = None ymax = None # Attach axes to series, find min-max for series in self.chart.series(): series.attachAxis(axisx) series.attachAxis(axisY) vect = series.pointsVector() for i in range(len(vect)): if ymin is None: ymin = vect[i].y() ymax = vect[i].y() else: ymin = min(ymin, vect[i].y()) ymax = max(ymax, vect[i].y()) # Update range # print('min max', ymin, ymax) if ymin is not None: axisY.setRange(ymin, ymax)
def __init__(self): super().__init__() # window size self.setMinimumSize(600, 400) df = pyupbit.get_ohlcv("KRW-BTC") # data series = QLineSeries() for index in df.index: close = df.loc[index, 'close'] dt = index.timestamp() * 1000 # msecs series.append(dt, close) # chart object chart = QChart() chart.legend().hide() chart.addSeries(series) # data feeding # axis axis_x = QDateTimeAxis() axis_x.setFormat("yyyy-MM-dd") chart.addAxis(axis_x, Qt.AlignBottom) series.attachAxis(axis_x) axis_y = QValueAxis() axis_y.setLabelFormat("%i") chart.addAxis(axis_y, Qt.AlignLeft) series.attachAxis(axis_y) # margin chart.layout().setContentsMargins(0, 0, 0, 0) # displaying chart chart_view = QChartView(chart) chart_view.setRenderHint(QPainter.Antialiasing) self.setCentralWidget(chart_view)
def __init__(self): VCCommons.__init__(self) self.__chart=QChart() #After setChart you must call it with chart() self._allowHideSeries=True #Axis cration self.axisX=QDateTimeAxis() self.axisX.setTickCount(8); self.axisX.setFormat("yyyy-MM"); self.maxx=None self.maxy=None self.minx=None self.miny=None self.__ohclduration=eOHCLDuration.Day self.axisY = QValueAxis() self.axisY.setLabelFormat("%i") self.setRenderHint(QPainter.Antialiasing); self.series=[] self.popup=MyPopup(self)
def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) # Setup horizontal axis x_axis = QDateTimeAxis() x_axis.setFormat('hh:mm') x_axis.setTickCount(7) x_axis.setTitleText('Godzina [hh:mm]') self.addAxis(x_axis, Qt.AlignBottom) # Setup vertical axis y_axis = QValueAxis() y_axis.setTitleText('Liczba osób w kolejce') self.addAxis(y_axis, Qt.AlignLeft) self.resetAxes() self.legend().setVisible(False) self._top_series: Optional[int] = None
def __init__(self, chart=None, parent=None): super(BaseTimedGraph, self).__init__(parent) self.setObjectName('BaseGraph') self.seriesPurgedT = None self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.chart = chart if chart else QChart() self.setRenderHint(QPainter.Antialiasing) self.axisX = QDateTimeAxis() self.axisX.setTickCount(5) self.axisX.setFormat('hh:mm:ss') self.axisX.setTitleText('Time') self.chart.addAxis(self.axisX, Qt.AlignBottom) self.axisY = QValueAxis() self.axisY.setLabelFormat('%i') self.axisY.setMin(0) self.axisY.setMax(1024) self.chart.addAxis(self.axisY, Qt.AlignLeft)
def set_bound(self, dt, low, high): axisX = QDateTimeAxis() axisX.setFormat('h:mm') start_time = QDateTime() finish_time = QDateTime() start_time.setDate(QDate(dt.year, dt.month, dt.day)) start_time.setTime(QTime(9, 0)) finish_time.setDate(QDate(dt.year, dt.month, dt.day)) finish_time.setTime(QTime(15, 30)) axisX.setRange(start_time, finish_time) axisY = QValueAxis() axisY.setRange(low, high) self.chart_view.chart().setAxisX(axisX, self.price_series) self.chart_view.chart().setAxisY(axisY, self.price_series)
def __init__(self, parent=None, ticker="BTC"): super().__init__(parent) # chart.ui 파일을 읽어와서 디자인을 적용한다. uic.loadUi("resource/chart.ui", self) self.ticker = ticker self.viewLimit = 120 # 라인 차트로 그릴 데이터의 수를 미리 정의한다. self.priceData = QLineSeries() self.priceChart = QChart() self.priceChart.addSeries(self.priceData) self.priceChart.legend().hide() # 차트의 범례를 숨긴다. axisX = QDateTimeAxis() # PyChart에서 날짜 축을 관리하는 QDateTimeAxis 객체를 생성한다. axisX.setFormat("hh:mm:ss") # 시:분:초 형태로 차트에 표시한다. axisX.setTickCount(4) # 차트에 표시할 날짜의 개수를 4로 지정한다. dt = QDateTime.currentDateTime() # 현재 시간 정보를 QDateTime 객체로 얻어온다. # X축에 출력될 값의 범위를 현재 시간부터 viewLimit(120)초 이후까지 설정한다. # addSecs 메서드는 지정된 초 이후의 시간을 QDateTime으로 반환한다. axisX.setRange(dt, dt.addSecs(self.viewLimit)) axisY = QValueAxis() # 정수를 저장하는 축을 생성하고 축의 레이블을 차트에 표시하지 않는다. axisY.setVisible(False) self.priceChart.addAxis(axisX, Qt.AlignBottom) self.priceChart.addAxis(axisY, Qt.AlignRight) self.priceData.attachAxis(axisX) self.priceData.attachAxis(axisY) # 차트 객체 안에 여백을 최소화해서 차트를 크게 그린다. self.priceChart.layout().setContentsMargins(0, 0, 0, 0) self.priceView.setChart(self.priceChart) self.priceView.setRenderHints( QPainter.Antialiasing) # 차트에 anti-aliasing을 적용한다. # PriceWorker 객체 생성 및 dataSent 이벤트를 연결할 슬롯을 지정한다. self.pw = PriceWorker(ticker) self.pw.dataSent.connect(self.appendData) self.pw.start()
def __init__( self, parent=None, ticker="KRW-ETH" ): #파라미터 parent는 위젯이 그려질 위치를 지정하는데 사용, 입력하지 않으면 None #티커는 조회할 코인의 종류를 지정 super().__init__(parent) uic.loadUi("source/chart.ui", self) self.ticker = ticker self.viewLimit = 128 #라인 차트로 그릴 데이터의 수를 미리 정의 self.pw = PriceWorker(ticker) self.pw.dataSent.connect(self.appendData) self.pw.start() self.priceData = QLineSeries( ) #QLineSeries 객체의 append메서드로 출력할 데이터의 좌표를 x, y 순서대로 입력 self.priceChart = QChart() #데이터를 차트 객체로 전달해서 시각화 #QChart를 사용해 차트의 타이틀을 입력하거나 범례를 추가하는 등의 일을 할 수 있음 self.priceChart.addSeries(self.priceData) self.priceChart.legend().hide() #차트의 범례를 숨김 axisX = QDateTimeAxis() #PyChart에서 날짜 축을 관리하는 QDateTimeAxis 객체를 생성 axisX.setFormat("hh:mm:ss") #"시:분:초" 형태로 차트에 표시 axisX.setTickCount(4) #표시할 날짜의 개수를 4로 지정 dt = QDateTime.currentDateTime() #현재 시간 정보를 QDateTime 객체로 axisX.setRange( dt, dt.addSecs(self.viewLimit) ) #X축에 출력될 값의 범위를 현재 시간부터 viewLimit (120)초 이후까지 설정, 지정된 초 이후의 시간을 QDateTime으로 반환 axisY = QValueAxis() #정수를 저장하는 축을 생성 axisY.setVisible(False) #축의 레이블을 차트에 표시하지 않음 #X, Y축을 차트와 데이터에 연결 self.priceChart.addAxis(axisX, Qt.AlignBottom) self.priceChart.addAxis(axisY, Qt.AlignRight) self.priceData.attachAxis(axisX) self.priceData.attachAxis(axisY) self.priceChart.layout().setContentsMargins(0, 0, 0, 0) #여백을 최소화
def set_date(self, dt): for i in range(2): axisX = QDateTimeAxis() axisX.setFormat('h:mm') start_time = QDateTime() finish_time = QDateTime() start_time.setDate(QDate(dt.year, dt.month, dt.day)) start_time.setTime(QTime(9, 0)) finish_time.setDate(QDate(dt.year, dt.month, dt.day)) finish_time.setTime(QTime(15, 30)) axisX.setRange(start_time, finish_time) axisY = QValueAxis() axisY.setRange(0, self.default_max_y_value) self.y_axis.append(axisY) self.chart_view[i].chart().setAxisX(axisX) self.chart_view[i].chart().setAxisY(axisY) for j in range(4): self.line_series[i][j].attachAxis(axisX) self.line_series[i][j].attachAxis(axisY)
def __init__(self): super().__init__() # thread self.worker = Worker() self.worker.price.connect(self.get_price) self.worker.start() # window size self.setMinimumSize(600, 400) # data self.series = QLineSeries() # chart object self.chart = QChart() self.chart.legend().hide() self.chart.addSeries(self.series) # data feeding # axis axis_x = QDateTimeAxis() axis_x.setFormat("hh:mm:ss") dt = QDateTime.currentDateTime() axis_x.setRange(dt, dt.addSecs(128)) self.chart.addAxis(axis_x, Qt.AlignBottom) self.series.attachAxis(axis_x) axis_y = QValueAxis() axis_y.setLabelFormat("%i") self.chart.addAxis(axis_y, Qt.AlignLeft) self.series.attachAxis(axis_y) # margin self.chart.layout().setContentsMargins(0, 0, 0, 0) # displaying chart chart_view = QChartView(self.chart) chart_view.setRenderHint(QPainter.Antialiasing) self.setCentralWidget(chart_view)
def _fill_chart(self, items: List[Run]): series = QLineSeries() series.setPointsVisible(True) series.setPointLabelsVisible(True) series.setPointLabelsFormat("@yPoint") series.hovered.connect(self.chart_view.show_series_tooltip) self.timestamp_by_run.clear() for run in items: date_value = calendar.timegm(run.date.timetuple()) * 1000 total_issues = run.get_total_issues() series.append(date_value, total_issues) self.timestamp_by_run[date_value] = run chart = QChart() chart.setTheme(QChart.ChartThemeDark) chart.setAnimationOptions(QChart.SeriesAnimations) chart.addSeries(series) chart.legend().hide() # No margin chart.layout().setContentsMargins(0, 0, 0, 0) chart.setBackgroundRoundness(0) axisX = QDateTimeAxis() axisX.setFormat("dd/MM/yyyy") axisX.setTitleText('Date') chart.addAxis(axisX, Qt.AlignBottom) series.attachAxis(axisX) axisY = QValueAxis() axisY.setLabelFormat('%d') axisY.setTitleText('Total issues') chart.addAxis(axisY, Qt.AlignLeft) series.attachAxis(axisY) self.chart_view.clear_all_tooltips() self.chart_view.setChart(chart)
def drawChart(self): conn=sqlite3.connect('emaildb.sqlite') cur=conn.cursor() title=self.lineEditProdName.text() mall_url=self.farm_combo.currentText() sql=f"select dt, jjim, sold, review from PROD3 where title='{title}'" cur.execute(sql) conn.commit() rows=cur.fetchall() series=[] # series = QLineSeries(self) series.append(QLineSeries(self)) series.append(QLineSeries(self)) series.append(QLineSeries(self)) tod=datetime.today() nextday=datetime.today()+timedelta(days=1) d=QDate(2020,1,3) dt=QDateTime(d) d2=d.addDays(1) dt2=dt.addDays(1) for i,row in enumerate(rows): for j, serie in enumerate(series): # serie.append((dt.addDays(i)).toMSecsSinceEpoch(),int(row[j+1])) serie.append(i,int(row[j+1])) for serie in series: serie.setPointsVisible(True) self.linechart.removeAllSeries() self.linechart2.removeAllSeries() self.linechart3.removeAllSeries() self.linechart.addSeries(series[0]) self.linechart2.addSeries(series[1]) self.linechart3.addSeries(series[2]) dateAxis=QDateTimeAxis() dateAxis2=QDateTimeAxis() dateAxis3=QDateTimeAxis() self.linechart.addAxis(dateAxis, Qt.AlignBottom) self.linechart2.addAxis(dateAxis2, Qt.AlignBottom) self.linechart3.addAxis(dateAxis3, Qt.AlignBottom) self.linechart.createDefaultAxes() self.linechart2.createDefaultAxes() self.linechart3.createDefaultAxes() self.linechart.setAnimationOptions(QChart.SeriesAnimations) self.linechart.setTitle("찜") self.linechart.legend().setVisible(True) self.linechart2.setAnimationOptions(QChart.SeriesAnimations) self.linechart2.setTitle("구매") self.linechart2.legend().setVisible(True) self.linechart3.setAnimationOptions(QChart.SeriesAnimations) self.linechart3.setTitle("리뷰") self.linechart3.legend().setVisible(True) self.chartview.setRenderHint(QPainter.Antialiasing) self.chartview2.setRenderHint(QPainter.Antialiasing) self.chartview3.setRenderHint(QPainter.Antialiasing) cur.close() conn.close()