我正在用 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)