如何使用Bokeh正确创建HeatMap

发布于 2021-01-29 14:56:28

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

在此处输入图片说明

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

关注者
0
被浏览
123
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    'metric': [item for item in list(nba.columns) for i in range(len(nba.index))],
    

    因此,适用于我的代码如下:

    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)
    

    在此处输入图片说明



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看