PyQt не отрисовывает график

Привожу код графика

x1=[397.32,
400.2,
403.09,
405.97,
408.85,
411.74,
414.63,
417.52,
420.4,
423.29,
426.19,
429.08,
431.97,
434.87]

y1=[0.07542361180220844,
0.06165789718408404,
0.05656957760844683,
0.0541456491209457,
0.05249979043283297,
0.05114544866346287,
0.0503212323966314,
0.049857238503458946,
0.04947481544904317,
0.0489829950303016,
0.048930385042992956,
0.04893327934757965,
0.04835261615067527,
0.047385335326809795]

for i in range(len(x1)):
    upperSeries.append(x1[i], y1[i])
series=QAreaSeries(upperSeries)
chart = QChart()
pen = QPen(Qt.red)
pen.setWidth(3)
series.setPen(pen)
chart.addSeries(series)
chart.setTitle('Simple Area Chart')
chart.legend().hide()
chart.createDefaultAxes()
chart.axes(Qt.Horizontal)[0].setRange(min(x),max(x))
chart.axes(Qt.Vertical)[0].setRange(min(y), max(y))
chartView = QChartView(chart)
chartView.setWindowTitle('Area Chart')
chartView.resize(800, 600)
chartView.show()
app.exec_()

Не отрисовывает. В чем может быть проблема?


Ответы (2 шт):

Автор решения: S. Nick

Я не совсем понял какой график вы хотите отрисовать, поэтому предоставляю для вас два варианта в разных ответах.

Класс QAreaSeries представляет данные в виде диаграмм Area Charts.
Area Charts используется для отображения количественных данных. Он основан на серии линий таким образом, что область между граничными линиями выделяется цветом.

Больше https://doc.qt.io/qt-5/qareaseries.html#details

import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtChart import QChartView, QChart, QLineSeries, QAreaSeries
from PyQt5.QtCore import QPointF
from PyQt5.QtGui import QColor, QGradient, QLinearGradient, QPainter, QPen


class Window(QChartView):
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        self.resize(600, 400)
        self.setRenderHint(QPainter.Antialiasing)

        # диаграмма
        chart = QChart()
        self.setChart(chart)
        # Добавить Series
        chart.addSeries(self.getSeries())
        # Создать ось по умолчанию
        chart.createDefaultAxes()
        # Установите диапазон оси XY
        chart.axisX().setRange(397.3, 434.9)     
        chart.axisY().setRange(0.0474, 0.0754)   

    def getSeries(self):
        # Создать Series, Класс QLineSeries представляет данные в виде линейных диаграмм.
        # Для создания диаграмм Area Charts нам понадобятся два экземпляра QLineSeries
        # Они собираются определить верхнюю и нижнюю границу области.
        series0 = QLineSeries(self)
        series1 = QLineSeries(self)

        # Добавить данные
        for i in range(len(x1)):
            series0.append(QPointF(x1[i], y1[i]))
            series1.append(QPointF(x1[i], y1[i]-0.0005)) 
        
        # Создать карту местности
        series = QAreaSeries(series0, series1)
        series.setName('Area Charts')
        # кисть
        pen = QPen(0x059605)
        pen.setWidth(3)
        series.setPen(pen)
        # Установить кисть
        gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 1))
        gradient.setColorAt(0.0, QColor(0x3cc63c))
        gradient.setColorAt(1.0, QColor(0x26f626))
        gradient.setCoordinateMode(QGradient.ObjectBoundingMode)
        series.setBrush(gradient)

        return series

x1 = [
    397.32,
    400.2,
    403.09,
    405.97,
    408.85,
    411.74,
    414.63,
    417.52,
    420.4,
    423.29,
    426.19,
    429.08,
    431.97,
    434.87
]

y1 = [
    0.07542361180220844,
    0.06165789718408404,
    0.05656957760844683,
    0.0541456491209457,
    0.05249979043283297,
    0.05114544866346287,
    0.0503212323966314,
    0.049857238503458946,
    0.04947481544904317,
    0.0489829950303016,
    0.048930385042992956,
    0.04893327934757965,
    0.04835261615067527,
    0.047385335326809795
]

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка
Автор решения: S. Nick

Класс QLineSeries представляет данные в виде линейных диаграмм.
Линейная диаграмма используется для отображения информации в виде серии точек данных, соединенных прямыми линиями.

Больше https://doc.qt.io/qt-5/qlineseries.html#details

import sys
from PyQt5.QtChart import QChart, QChartView, QLineSeries
from PyQt5.QtCore import QPointF 
from PyQt5.QtWidgets import QApplication, QMainWindow


x1 = [
    397.32,
    400.2,
    403.09,
    405.97,
    408.85,
    411.74,
    414.63,
    417.52,
    420.4,
    423.29,
    426.19,
    429.08,
    431.97,
    434.87
]

y1 = [
    0.07542361180220844,
    0.06165789718408404,
    0.05656957760844683,
    0.0541456491209457,
    0.05249979043283297,
    0.05114544866346287,
    0.0503212323966314,
    0.049857238503458946,
    0.04947481544904317,
    0.0489829950303016,
    0.048930385042992956,
    0.04893327934757965,
    0.04835261615067527,
    0.047385335326809795
]


app = QApplication(sys.argv)

series0 = QLineSeries()
series0.setName('LineSeries')

for i in range(len(x1)):
    series0.append(QPointF(x1[i], y1[i]))
    
chart = QChart()
chart.addSeries(series0)
chart.createDefaultAxes()
chartView = QChartView(chart)

window = QMainWindow()
window.setCentralWidget(chartView)

window.resize(600, 400)
window.show()
sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка