Я пытаюсь построить простую тепловую карту, используя bokeh / holoviews. Мои данные (pandas dataframe) имеют категории (по y) и дату / время (по x). Проблема состоит в том, что количество категориальных элементов составляет> 3000, и результирующий график отображается с перепутанными перекрывающимися тикерами на оси y, что делает его абсолютно бесполезным. В настоящее время существует ли надежный способ в боке выбрать только подмножество тикеров в зависимости от уровня масштабирования?
Я уже пробовал сюжетно, и результат выглядит идеально, но мне нужно использовать bokeh / holoviews и datashader. Я также хочу избегать замены категорий на числовые тикеры.
Я также пробовал это решение , но на самом деле оно не работает (боке 1.2.0).
Это игрушечный пример, представляющий мой вариант использования (на самом деле здесь #y равен 1000, но это дает идею)
from datetime import datetime
import pandas as pd
import numpy as np
from bokeh.plotting import figure, show
from bokeh.transform import linear_cmap
from bokeh.io import output_notebook
output_notebook()
# build sample data
index = pd.date_range(start='1/1/2019', periods=1000, freq='T')
data = np.random.rand(1000,100)
columns = ['col'+ str(n) for n in range(100)]
# initial data format
df = pd.DataFrame(data=data, index=index, columns=columns)
# bokeh
df = df.stack().reset_index()
df.rename(columns={'level_0':'x','level_1':'y', 0:'z'},inplace=True)
df.sort_values(by=['y'],inplace=True)
x = [
date.to_datetime64().astype('M8[ms]').astype('O')
for date in df.x.to_list()
]
data = {
'value': df.z.to_list(),
'x': x,
'y': df.y.to_list(),
'date' : df.x.to_list()
}
p = figure(x_axis_type='datetime', y_range=columns, width=900, tooltips=[("x", "@date"), ("y", "@y"), ("value", "@value")])
p.rect(x='x', y='y', width=60*1000, height=1, line_color=None,
fill_color=linear_cmap('value', 'Viridis256', low=df.z.min(), high=df.z.max()), source=data)
show(p)
Это ожидаемый результат, полученный в Plotly
plotly
Пока это результаты, полученные в Боке
бок