散景绘图"超出范围的浮点值不符合 JSON 标准"问题



我尝试使用散景来构建热图。但是,我不断收到相同的错误。我将在下面包含我的代码和错误,请帮助我!

假设错误主要与我数据中的 Nan 有关,因此我在代码中添加了必要的 if 语句以确保解决此问题。甚至试图在以下列表中用零填充任何可能的 Na:"用户"、"模块"、"比率"、"颜色"和"alpha"。然而,这些变化都没有帮助。

colors = ['#ff0000','#ff1919','#ff4c4c','#ff7f7f','#99cc99','#7fbf7f','#4ca64c','#329932','#008000'] sorted_userlist = list(total_checks_sorted.index) user = [] module = [] ratio = [] color = [] alpha = []
for m_id in ol_module_ids:
    pset = m_id.split('/')[-1]
    col_name1 = m_id + '_ratio'
    col_name2 = m_id + '_total'
    min_checks = min(check_matrix[col_name2].values)
    max_checks = max(check_matrix[col_name2].values)
    for i, u in enumerate(sorted_userlist): 
        module.append(pset)
        user.append(str(i+1))
        ratio_value = check_matrix[col_name1][u]
        ratio.append(ratio_value)
        
        al= math.sqrt((check_matrix[col_name2][u]-min_checks+0.0001)/float(max_checks))
        if ratio_value>0.16:
            al = min(al*100,1)
        alpha.append(al)
        if np.isnan(ratio_value):
            color.append(colors[0])
        else:
            color.append(colors[int(ratio_value*8)])
    
#fill NAs in source lists with zeroes pd.Series(ratio).fillna(0).tolist()
col_source = ColumnDataSource(data = dict(module = module, user = user, color=color, alpha=alpha, ratio = ratio))
#source = source.fillna('')        
#TOOLS = "resize,hover,save,pan,box_zoom,wheel_zoom" TOOLS = "reset,hover,save,pan,box_zoom,wheel_zoom"

p=figure(title="Ratio of Correct Checks Each Student Each Online Homework Problem",
    x_range=pset, 
    #y_range = list(reversed(sorted_userlist)),
    y_range=list(reversed(list(map(str, range(1,475))))),
    x_axis_location="above", plot_width=900, plot_height=4000,
    toolbar_location="left", tools=TOOLS)
    #axis_line_color = None)
    #outline_line_color = None)#
p.rect("module", "user", 1, 1, source=col_source,
    color="color", alpha = 'alpha', line_color=None)
show(p)

NaN 值不可序列化(这是 JSON 标准中的一个明显缺陷(。您提到ratio列表中有 NaN 值,您在此处将其放在ColumnDataSource中:

col_source = ColumnDataSource(data=dict(..., ratio=ratio))

由于它位于CDS中,散景将尝试对其进行序列化,从而导致错误。您有两种选择:

  • 如果您由于某种原因实际上不需要图中的数字ratio值(例如,驱动悬停工具或自定义映射器或其他东西(,则只需将其排除在数据源之外即可。

  • 如果确实需要发送ratio值,则必须将数据放入 NumPy 数组中。Bokeh 使用不同的非 JSON 方法序列化 NumPy 数组,因此可以成功发送 NaN。

最新更新