来自 Pandas DataFrame 的 Bokeh 热图检索空图

问题描述 投票:0回答:0

我正在用 Python 和 bokeh 包编写代码,以从熊猫数据框创建热图。 该图表示列之间公共元素的数量(例如:G1 和 G2 只有一个元素共有)。

我正在使用我在另一个项目中使用的代码,该项目显示了相同的东西,但在这里我得到了带有正确的 CategoricalColorMapper 条和轴的图,但它是空的。 你能帮我找出代码中的问题所在吗?

这是我用于测试目的的示例:

import pandas as pd
import bokeh
from bokeh.io import show
from bokeh.models import ColorBar, ColumnDataSource, CategoricalColorMapper
from bokeh.plotting import figure
from bokeh.transform import transform


df = pd.DataFrame(data=[[5,1,3],[1,10,3],[3,1,4]],columns=["G1","G2","G3"],index=["G1","G2","G3"])

tmp = df.stack(dropna=False).rename("value").reset_index()
fact= tmp.value.unique()
fact.sort()
fact = fact.astype(str)
tmp.value = tmp.value.astype(str)

mapper = CategoricalColorMapper(palette=bokeh.palettes.inferno(len(tmp.value.unique())), factors= fact, nan_color = 'gray')

#Define a figure
p = figure(
    plot_width=1280,
    plot_height=800,
    x_range=list(df.columns),
    y_range=list(df.index[::-1]),
    x_axis_location="above",
    output_backend="webgl",
    toolbar_location="right",
    tools="pan,wheel_zoom,box_zoom,reset,save")

#Create rectangles for heatmap
p.rect(
    x="",
    y="",
    width=1,
    height=1,
    source=ColumnDataSource(tmp),
    fill_color=transform('value', mapper))
p.xaxis.major_label_orientation = 45

#Add legend
color_bar = ColorBar(
    color_mapper=mapper,
    label_standoff=6,
    border_line_color=None)
p.add_layout(color_bar, 'right')
show(p)
python pandas dataframe bokeh heatmap
© www.soinside.com 2019 - 2024. All rights reserved.