如何使用Bokeh正确创建HeatMap

Nik*_*s R 4 python heatmap bokeh

我正在尝试使用Bokeh而不是matplotlib 复制此问题中显示的HeatMap.我不能说得对.现有的例子并没有帮助我理解我做错了什么.我谦虚的尝试

from bokeh.io import output_notebook; output_notebook()
from bokeh.charts import HeatMap, show
from bokeh.palettes import RdYlGn6
import pandas as pd
import numpy as np

nba = pd.read_csv(urlopen("http://datasets.flowingdata.com/ppg2008.csv"), index_col=0)

# Normalize the data columns and sort.
nba = (nba - nba.mean()) / (nba.max() - nba.min())
nba.sort('PTS', inplace=True)

score = []
for x in nba.apply(tuple):
  score.extend(x)

data = {
  'players': list(nba.index) * len(nba.columns),
  'metric':  list(nba.columns) * len(nba.index),
  'score':   score,
}

hm = HeatMap(data, x='metric', y='players',values='score', title='Fruits', stat=None)
show(hm)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,尽管标题相似,但这并不能回答我的问题.这是不一样的错误,我正在使用Bokeh 0.12.3

Gui*_*ido 11

如果您仍想使用Bokeh创建热图,则会在更新版本中删除图表模块.换句话说,此命令不适用于较新版本的Bokeh:

from bokeh.charts import HeatMap
Run Code Online (Sandbox Code Playgroud)

因为它给出了错误:

ImportError: cannot import name 'charts'
Run Code Online (Sandbox Code Playgroud)

图表被移至bkcharts包,该包已停止使用(在此答案中进一步参考).Holoviews仍然支持Bokeh,但有一些不同的语法.

在Bokeh中创建Heatmaps的解决方案是使用p.rect()按照此链接中有关失业率的说明,这导致如下所示:

p = figure()
hm = p.rect(data, x='metric', y='players',values='score', title='Fruits', stat=None)
Run Code Online (Sandbox Code Playgroud)

这会产生如下结果:

在此输入图像描述


p-r*_*bot 3

将数据的生成更改metric为按元素重复,它应该是正确的:

'metric': [item for item in list(nba.columns) for i in range(len(nba.index))],
Run Code Online (Sandbox Code Playgroud)

所以对我有用的代码如下:

from bokeh.charts import HeatMap, show, output_file
import pandas as pd, numpy as np
from urllib2 import urlopen

nba = pd.read_csv(urlopen("http://datasets.flowingdata.com/ppg2008.csv"), index_col=0)

# Normalize the data columns and sort.
nba = (nba - nba.mean()) / (nba.max() - nba.min())
nba.sort_values(by = 'PTS', inplace=True)

score = []
for x in nba.apply(tuple):
  score.extend(x)

data = {
  'players': list(nba.index) * len(nba.columns),
  'metric':  [item for item in list(nba.columns) for i in range(len(nba.index))],
  'score':   score,
}

output_file('test.html')
hm = HeatMap(data, x='metric', y='players',values='score', title='Fruits', stat=None)
show(hm)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述