Python + Bokeh: Как правильно раскрасить категорию точек на линейном графике в Bokeh? - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь построить линейный сюжет с Боке, который будет показывать точки разных цветов в соответствии с их категориями.эти точки - частота дыхания пациента.Существует 13 категорий частоты дыхания, таких как A, B, C и т. Д. Я смог нарисовать график, но не смог нарисовать его в соответствии с категориями.

Вот мой код для построения графика:

x = np.arange(1, len(resp_rates))
y = resp_rates
# output to static HTML file
output_file("Respiration rate.html")

# create a new plot with a title and axis labels
p = figure(title="Respiration rate class", x_axis_label= "Patient ID 123", y_axis_label= "Respiration rates", plot_width = 1000)

# add a line renderer with legend and line thickness
p.line(x, y, legend="Respiration rate", line_width=2)


# show the results
show(p)

Вывод: enter image description here

Я рассчитал классы для каждой точки, которыехранится в списке под названием метки.Как раскрасить точки на линейном графике в соответствии с их классами / метками? Мне нужно использовать только Bokeh.

Редактировать: Я изменил код:

x = np.arange(1, len(resp_rates))
y = resp_rates
# output to static HTML file
output_file("Respiration rate.jpg")

# create a new plot with a title and axis labels
p = figure(title="Respiration rate class", x_axis_label= "Patient ID 123", y_axis_label= "Respiration rates", plot_width = 3000, x_range=(0, 101))

# add a line renderer with legend and line thickness
pal = Dark2[3]
factors = list(set(labels))
source = ColumnDataSource(data=dict(Classes=labels, x=x, y=y))
p.line(x, y, legend="Respiration rate", line_width=2, factor_cmap('Classes', palette=pal, factors=factors), source=source)


# show the results
show(p)

Теперь выдает эту ошибку:

 File "<ipython-input-32-8377d3798bb8>", line 13
    p.line(x, y, legend="Respiration rate", line_width=2, factor_cmap('Classes', palette=pal, factors=factors), source=source)
                                                         ^
SyntaxError: positional argument follows keyword argument

1 Ответ

0 голосов
/ 22 ноября 2018

Метод глифа line рисует только линию одного цвета.Он не рисует ничего другого, например, он не рисует никаких глифов-маркеров в точках, составляющих линию.Если вы хотите этого, вы можете передать те же данные любому маркеру, который вы хотите использовать для точек:

p.line(x, y, legend="Respiration rate", line_width=2)
p.circle(x, y, color=...)

Где значение color может быть списком цветов, для которых у вас есть цветовая карта на основекатегория раньше времени, или может быть factor_cmap для автоматической раскраски точек, как показано здесь:

https://bokeh.pydata.org/en/latest/docs/user_guide/data.html#markers

В качестве рекомендации, вы должны рассмотреть возможность помещения данных в ColumnDataSource в явном виде, чтобы его можно было совместно использовать между глифами строки и маркера без дублирования (и это необходимо, если вы вообще хотите использовать factor_cmap).

...