Попытка нанести значения оси X (Событие) на соответствующие оси X.Ось Y относительно времени (дня), когда и как долго длилось событие.Первая метка и нанесенные данные верны.Однако второй набор данных, по-видимому, пропускает тик большой оси x и помещается после него, но до следующего тика основной оси x.Это повторяется для каждого дополнительного нанесенного значения оси x.Данные не показывают проблему, с которой они должны отображаться по оси X.
Определяет данные (источник) и может отобразить проблему с помощью примерно 50 строк кода.
from bokeh.io import output_file
from bokeh.models import ColumnDataSource, LabelSet
from bokeh.plotting import figure, show
from bokeh.models.formatters import NumeralTickFormatter
import pandas as pd
import math
output_file("events.html", mode="inline")
x1 = []
y1 = []
x2 = []
y2 = []
colorList = []
shortNames = []
nameAndId = ["Event1", 0]
x1.append(nameAndId)
y1.append(33470)
x2.append(nameAndId)
y2.append(33492)
colorList.append("red")
shortNames.append("Evt1")
nameAndId = ["Event2", 1]
x1.append(nameAndId)
y1.append(34116)
x2.append(nameAndId)
y2.append(34151)
colorList.append("green")
shortNames.append("Evt2")
xAxisLabels = ["Event1", "Event2"]
data = {"x1": x1, "y1": y1, "x2": x2, "y2": y2, "color": colorList,\
"shortName": shortNames}
eventDF = pd.DataFrame(data=data,
columns=("x1", "y1", "x2", "y2", "color",\
"shortName"))
source = ColumnDataSource(eventDF)
yRange = [34151, 33470]
p = figure(plot_width=700, plot_height=750, x_range=xAxisLabels,\
y_range=yRange, output_backend="webgl")
p.xaxis.major_label_orientation = math.pi / -2
p.segment(x0="x1",y0="y1",x1="x2",y1="y2", source=source, color="color"\
line_width=12)
p.yaxis[0].formatter = NumeralTickFormatter(format="00:00:00")
p.xaxis.axis_label = "Events"
labels = LabelSet(x="x2",y="y2", text="shortName", text_font_size="8pt"\
text_color="black", level="glyph", x_offset=-6,\
y_offset=-5, render_mode="canvas", angle=270,\
angle_units="deg", source=source)
p.add_layout(labels)
show(p)
IЯ думаю, что это что-то простое, я выглядел как форматер xAxis.Я попытался определить один, но ни один, кажется, не работает для моего варианта использования.Похоже, данные не связаны с xAxisLabel.Я ожидаю, что событие 1 будет отображаться на первом тике оси X, а событие 2 - на втором тике оси X.Событие 1 является правильным, но для каждого последующего события каждый тик по главной оси X пропускается с данными, находящимися между метками.