Сюжет: проблема меток на подзаголовках с двумя строками - PullRequest
2 голосов
/ 27 мая 2020

Это мой график sh код:

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import pandas as pd

data = pd.read_csv('https://raw.githubusercontent.com/AmirForooghi/stocks_csv/master/stocks_sample.csv')

df_1 = data.loc[data.sym == 'f']
df_2 = data.loc[data.sym == 'i']
df_3 = data.loc[data.sym == 'c']

fig = make_subplots(rows=2, cols=3, row_heights=[0.8, 0.2], vertical_spacing=0,
                    horizontal_spacing=0.05, shared_xaxes=True, shared_yaxes=False)

fig.add_trace(go.Candlestick(open=df_1['open'], high=df_1['high'], low=df_1['low'],
                             close=df_1['close'],
                             increasing_line_color='#0384fc', decreasing_line_color='#e8482c'
                             ), row=1, col=1)

fig.add_trace(go.Scatter(x=list(range(40)), y=df_1['pct'], line_color='#fae823', hovertemplate=[]),
              row=2, col=1)

fig.add_trace(go.Candlestick(open=df_2['open'], high=df_2['high'], low=df_2['low'],
                             close=df_2['close'],
                             increasing_line_color='#0384fc', decreasing_line_color='#e8482c'
                             ), row=1, col=2)

fig.add_trace(go.Scatter(x=list(range(40)), y=df_2['pct'], line_color='#fae823', hovertemplate=[]),
              row=2, col=2)

fig.add_trace(go.Candlestick(open=df_3['open'], high=df_3['high'], low=df_3['low'],
                             close=df_3['close'],
                             increasing_line_color='#0384fc', decreasing_line_color='#e8482c'
                             ), row=1, col=3)

fig.add_trace(go.Scatter(x=list(range(40)), y=df_3['pct'], line_color='#fae823', hovertemplate=[]),
              row=2, col=3)

fig.update_layout({'plot_bgcolor': "#21201f", 'paper_bgcolor': "#21201f", 'legend_orientation': "h"},
                  legend=dict(y=1, x=0),
                  font=dict(color='#dedddc'), dragmode='pan', hovermode='x unified', showlegend=False,
                  margin=dict(b=20, t=0, l=0, r=40))

fig.update_xaxes(showgrid=False, zeroline=False, rangeslider_visible=False, showticklabels=False, showline=True,
                 linecolor='#969799', showspikes=True, spikemode='across', spikesnap='data',
                 spikedash='dash', spikecolor='#ebeae8', spikethickness=0.5)

fig.update_yaxes(showgrid=False, zeroline=False, showticklabels=True, showline=False)

fig.update_traces(hoverinfo='skip', xaxis='x1', col=1)
fig.update_traces(hoverinfo='skip', xaxis='x2', col=2)
fig.update_traces(hoverinfo='skip', xaxis='x3', col=3)

app = dash.Dash(__name__)

app.layout = html.Div(children=[
    dcc.Graph(figure=fig, id='chart', config={'displayModeBar': False}),
])
if __name__ == '__main__':
    app.run_server(debug=True, dev_tools_ui=False, dev_tools_props_check=False)

Моя проблема с этой цифрой заключается в том, что метки для оси y неверны. enter image description here Как видите, для второго и третьего столбца он удален, а для первого столбца он перекрывается. Я пробовал подход этого решения , но если я удалю эти fig.update_traces, имеющиеся шипы изменятся (см. Обновление 1 ниже для получения дополнительной информации). То, что я имею в виду под пиками, проиллюстрировано ниже: enter image description here Как видно, когда курсор находится на диаграммах рассеяния, он отображает aws линию через весь столбец.

Я хочу, чтобы эти шипы оставались такими же, как сейчас. Как я могу исправить проблему с метками сейчас?

ОБНОВЛЕНИЕ 1:

Если я удалю три fig.update_traces в конце кода, всплески будут, но они не то, что я хочу. Это проиллюстрировано этими двумя скриншотами. Первый - это пики, которые есть в моем исходном коде, а второй - пики без fig.update_traces: enter image description here enter image description here

Основное отличие состоит в том, что всплески на рисунке выше проходят по всему столбцу и присутствуют только тогда, когда курсор находится на диаграмме рассеяния. Мне это НУЖНО. Это не для лучшей внешности! Они должны оставаться такими же, как на рисунке выше.

1 Ответ

2 голосов
/ 28 мая 2020

Это ответ в процессе ...

Я удалил:

 fig.update_traces(hoverinfo='skip', xaxis='x1', col=1)
 fig.update_traces(hoverinfo='skip', xaxis='x2', col=2)
 fig.update_traces(hoverinfo='skip', xaxis='x3', col=3)

И я получаю это с шипы, как вы можете видеть на своем gif:

enter image description here

Что мне не хватает?

...