Я пытаюсь нарисовать линейный график с помощью plotly_graph_objs и dash.
Когда я строю данные и соединяю каждую точку на основе оси X, которая имеет диапазон от 1 до 100, линия не соединяет точки наодин раз.Это означает, что линия просто соединяет некоторые значения xaxis, а другая линия соединяет другие значения.Соединения не были обработаны в порядке возрастания.Один подключил оси 1 и 100, другой подключил 2 к 10 и т. Д.
Я думаю, точка должна быть подключена непрерывно сразу на графике, если они были в одинаковом состоянии.Но я не могу понять это сам ... Как я могу это исправить?
Я уже сделал следующее: 1. отсортировал данные по xaxis, 2. изменил xaxis на числовой,
'' '
df
'''
class_mid class_sub class_ssub yr a b c d e
percentile . 1 2016 319 315 302 301 313
...
percentile . 100 2016 332 349 337 389 388
percentile . 100 2017 345 349 351 408 402
percentile . 100 2018 357 353 356 419 415
percentile . 100 2019 365 375 369 451 442
decile . 1 2016 345 349 351 408 402
...
decile . 10 2019 378 423 502 403 322
'''
' ''
объяснение макета
'''
id: main_graph: dcc.Graph /
id: var: dcc.Dropdown -> choice one of [a, b, c, d, e] /
id: yr: dcc.Rangeslider -> min=1998, max=2020 /
id: class_mid: dcc.Dropdown -> choice percentile or decile
'''
'' '
import datetime
import math
import pandas as pd
from flask import Flask
import dash
from dash.dependencies import Input, Output, State
import dash_core_components as dcc
import dash_html_components as html
import dash_table_experiments as dt
import plotly.graph_objs as go
@app.callback(
Output('main_graph', 'figure'),
[Input('var', 'value'),
Input('yr', 'value'),
Input('class_mid', 'value')])
def update_main_graph(var, yr_slider, class_mid):
traces=[]
for i in range(int(yr_slider[0]), int(yr_slider[1])):
if var == 'percentile':
g = df[[var, 'class_mid', 'class_ssub', 'yr']]
g = g[g['class_mid'].isin(['percentile'])]
g['class_ssub'] = pd.to_numeric(g['class_ssub'])
g = g.sort_values(['yr', 'class_ssub'])
traces.append(
go.Scatter(
x=g[g['class_mid'] == class_mid]['class_ssub'].unique(),
y=g[g['yr'] == i][var],
mode='lines+markers',
)
)
figure = go.Figure(data = traces)
return figure
Я ожидаю однолинейный график, когда выбираю год на Rangeslider, но на самом деле это две или более линий.