3 votes

Bokeh autofill datetime axis missing values : comment l'arrêter ?

J'essaie de construire un graphique interactif à partir d'un fichier pandas dataframe des données financières. L'indice de la base de données présente des lacunes lorsque les marchés sont fermés ou pendant les week-ends. Le problème est que Bokeh remplit toujours automatiquement ces trous lorsque j'utilise l'index dataframe comme xasis, ce qui le rend visuellement laid.

Example of Bokeh autofilling gaps in datetime axis.

Comment puis-je imprimer mes données sans lacunes ?

0voto

HYRY Points 26340

Si vous insérez NaN entre les sections, Bokeh ne comblera pas le vide :

source = ColumnDataSource(data=dict(x=[1, 2, 3, np.nan, 10, 20], y=[1, 2, 3, np.nan, 3, 4]))
fig = figure(plot_height=250)
fig.line("x", "y", source=source)
show(fig)

la sortie :

enter image description here

0voto

bigreddot Points 15929

Voici un exemple tiré de la base de données qui trace des chandeliers sans écarts. Vous devrez utiliser l'index entier des points comme axe des abscisses, puis utiliser un formateur de tic-tac personnalisé, ou des surcharges de tic-tac pour afficher les dates correctes :

import pandas as pd

from bokeh.io import show, output_file
from bokeh.plotting import figure
from bokeh.sampledata.stocks import MSFT

df = pd.DataFrame(MSFT)[:51]
inc = df.close > df.open
dec = df.open > df.close

p = figure(plot_width=1000, title="MSFT Candlestick with Custom X-Axis")

# map dataframe indices to date strings and use as label overrides
p.xaxis.major_label_overrides = {
    i: date.strftime('%b %d') for i, date in enumerate(pd.to_datetime(df["date"]))
}
p.xaxis.bounds = (0, df.index[-1])
p.x_range.range_padding = 0.05

p.segment(df.index, df.high, df.index, df.low, color="black")
p.vbar(df.index[inc], 0.5, df.open[inc], df.close[inc], fill_color="#D5E1DD", line_color="black")
p.vbar(df.index[dec], 0.5, df.open[dec], df.close[dec], fill_color="#F2583E", line_color="black")

output_file("custom_datetime_axis.html", title="custom_datetime_axis.py example")

show(p)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X