На графике есть два временных ряда по 8760 точек данных каждый. Что здесь происходит?
Минимальный пример
from argparse import ArgumentParserfrom pathlib import Path
from PySide6.QtCore import QUrl, QSize
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtWebEngineWidgets import QWebEngineView
class MainWindow(QMainWindow):
def __init__(self, path: str = "", *args, **kwargs):
super().__init__(*args, **kwargs)
if path:
self.browser = QWebEngineView()
self.browser.setUrl(QUrl.fromLocalFile(Path(path).absolute()))
self.setCentralWidget(self.browser)
self.resize(QSize(800, 500))
if __name__ == "__main__":
# HTML example produced using Bokeh: dump-viz.html
parser = ArgumentParser()
parser.add_argument("file")
opts = parser.parse_args()
app = QApplication()
window = MainWindow(opts.file)
window.show()
app.exec()
Приведенный выше сценарий и пример HTML доступны в этом списке.
Вы можете запустить его с помощью штрих-кода pyside-qwebengine-slow.py. qwebengine-ex-viz.html или создайте виртуальную среду, затем установите PySide6 и запустите ее в обычном режиме.
Дополнительная информация
Код, который я использую для создания этого графика, более или менее эквивалентен:def make_plot(data_list)
"""`data_list`: list of dataclasses representing a time series;
data.y, data.labels, etc.
"""
palette = TolRainbow[10]
cds = ColumnDataSource(data=pd.DataFrame({data.labels[0]: data.y for data in data_list}))
legend_items = {}
fig = figure(x_axis_label="x_label", y_axis_label="y_label", title="title", height=400, width=800)
for idx, data in enumerate(data_list):
line = fig.line("index", data.labels[0], source=cds, color=palette[idx])
point = fig.scatter("index", data.labels[0], source=cds, color=palette[idx], size=7)
legend_items[data.labels[0]] = [line, point]
legend = Legend(items=list(legend_items.items()))
fig.add_layout(legend, "right")
fig.legend.click_policy = "hide"
return fig
fig = make_plot(data_list)
html = file_html(fig, INLINE, title)
Подробнее здесь: https://stackoverflow.com/questions/790 ... points-slo