Точки, нанесенные DateTimeTick Formatter на графике рассеяния боке, перемещаются в оси - PullRequest
0 голосов
/ 01 апреля 2019

При использовании Bokeh plot я нахожу следующие проблемы:

1) Сюжет не показывает точки сразу.

2) При уменьшении масштаба с помощью колесика мыши 3 раза точки становятся видимыми.

3) Когда я уменьшаю 7 раз, точки сдвигаются на следующую / предыдущую минуту (в моем случае они находятся между 40 м: 54 с и 41 м первоначально после 7-го зума, они переходят к 40:38 до 40:44)

Я попытался установить g.x_range.range_padding = 0.1 0 без удачи

import pandas as pd
import bokeh
from bokeh.plotting import *
from bokeh.io import output_file,show,save
from bokeh.resources import CDN,INLINE
from bokeh.embed import file_html
from bokeh.models.ranges import *
from bokeh.palettes import Spectral6
from bokeh.transform import factor_cmap
from bokeh.transform import dodge
from bokeh.core.properties import value
from bokeh.embed import components
from bokeh.layouts import row,column
from bokeh.models import DatetimeTickFormatter


myPandas = pd.read_pickle("myPanda.pickle")
source=ColumnDataSource(data=myPandas)
yaxis="yaxis"
xaxis="xaxis"
def getTitle(graphDet):
    return graphDet

graphDet="Dummy"
g = figure(plot_width=450, plot_height=300, y_axis_label=yaxis, x_axis_label=xaxis, output_backend="webgl", title=getTitle(graphDet), x_axis_type="datetime")
x="time"
y="col1"
g.circle(myPandas[x],myPandas[y], size=5,legend=value(y))
g.xaxis[0].formatter=DatetimeTickFormatter(milliseconds = ['%3Nms']
                                        ,seconds = ['%Ss']
                                        )

g.x_range.range_padding = 0.1
g.xgrid.grid_line_color = None
g.legend.location = "top_right"
g.legend.orientation = "vertical"
show(g)

Файл выбора для ввода можно найти в https://www.dropbox.com/s/4fe11kdu00nbcjp/myPanda.pickle?dl=0

Я ожидаю, что сюжет должен быть виден с самого начала. Он не должен перескакивать во времени.

1 Ответ

0 голосов
/ 01 апреля 2019

Похоже, ошибка введена при использовании webgl.Удаление этого решает проблему, но приемлемо ли это для вас?(проверено на bokeh v1.0.4)

import pandas as pd
import bokeh
import numpy as np
from bokeh.plotting import *
from bokeh.io import output_file, show, save
from bokeh.resources import CDN, INLINE
from bokeh.embed import file_html
from bokeh.models.ranges import *
from bokeh.palettes import Spectral6
from bokeh.transform import factor_cmap
from bokeh.transform import dodge
from bokeh.core.properties import value
from bokeh.embed import components
from bokeh.layouts import row, column
from bokeh.models import DatetimeTickFormatter
from datetime import datetime, timedelta

d_start = datetime(2016, 6, 1)
d_step = timedelta(milliseconds = 100)

t = [d_start + (i * d_step) for i in range(0, 100)]
myPandas = pd.DataFrame(columns = ['time', 'col1'], data = {'time': t, 'col1': np.arange(100)}, index = t)
source = ColumnDataSource(data = myPandas)

def getTitle(graphDet):
    return graphDet

graphDet = "Dummy"
g = figure(plot_width = 450, plot_height = 300, y_axis_label = "yaxis", x_axis_label = "xaxis", title = getTitle(graphDet), x_axis_type = "datetime")
x = "time"
y = "col1"
g.circle(myPandas[x], myPandas[y], size = 5, legend = value(y))
g.xaxis[0].formatter = DatetimeTickFormatter(seconds = ['%Ss'], milliseconds = ['%3Nms'])

g.x_range.range_padding = 0.1
g.xgrid.grid_line_color = None
g.legend.location = "top_right"
g.legend.orientation = "vertical"
show(g)

enter image description here

...