来自Bokeh图形的“BAD_COLUMN_NAME”错误信息。

6

我正在尝试从一个csv文件中创建一个简单的bokeh图表(垂直或水平),但好像出了问题。我能够通过手动列出项目来利用ColumnDataSource创建图表,但是当我试图从一个简单的csv文件创建相同的图表时,它似乎给了我麻烦。现在我正在尝试读取一个pandas df来创建这个图形。我得到了可怕的Bad Column Name错误消息。任何帮助都将不胜感激。这是我第一次发布,如果我发布不正确,让我知道,我会改正。提前致谢。

from bokeh.io import output_notebook, show
output_notebook()

from bokeh.core.properties import value
from bokeh.io import show, output_file
from bokeh.models import ColumnDataSource, 
HoverTool, FactorRange, Range1d
from bokeh.plotting import figure
from bokeh.transform import dodge

output_file("test.html")

import pandas as pd

df = pd.read_csv(r'C:\test.csv')

print(df)

Mains  Total Length  Length Surveyed

0 1.0 88.4 87.6 1 2.0 313.8 316.8 2 3.0 271.0 265.6 3 4.0 155.0 153.1 4 5.0 301.8 299.0 5 6.0 293.9 132.3 6 7.0 148.1 147.2 7 8.0 292.9 290.1 8 9.0 307.6 306.0 9 10.0 559.0 236.0 10 11.0 448.8 441.5 11 12.0 297.9 13.0 12 13.0 172.2 67.5


这是一组数据,分别表示不同时间点的数值。第一列为时间点编号,第二列为第一个数值,第三列为第二个数值。
source = ColumnDataSource(data=dict(df))
Mains = data=dict(df)
data = {'Mains': df}

p = figure(x_range=(0,20), y_range=(0, 500), 
    plot_height=250, title="CCTV Survey August 6- 
    9th, 
    2018",
    toolbar_location=None, tools="")

p.vbar(x=dodge('Mains', -0.25, range=p.x_range), 
    top='2015', width=0.2, source=source,
    color="#c9d9d3", legend=value("Total 
    Length"))

p.vbar(x=dodge('Mains',  0.0,  range=p.x_range), 
    top='2016', width=0.2, source=source,
    color="#718dbf", legend=value("Length 
    Surveyed"))

p.add_tools(HoverTool(tooltips=[("Total Length", 
    "@2015 ft"),("Length Surveyed", "@2016 
    ft")]))
p.xaxis.major_label_orientation = 1.4
##p.x_range.factors=data_dict['x']
##p.x_range.range_padding = 0.0
p.xgrid.grid_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"

show(p)

错误:bokeh.core.validation.check:E-1001 (BAD_COLUMN_NAME):图形引用了不存在的列名:2015 [渲染器:GlyphRenderer(id='107d32b5-2700-4608-b1d8-9d0602f82a5b', ...)] 错误:bokeh.core.validation.check:E-1001 (BAD_COLUMN_NAME):图形引用了不存在的列名:2016 [渲染器:GlyphRenderer(id='4dcb960b-b29e-4998-972a-046311d037f8', ...)]

1个回答

2
你要告诉Bokeh,柱状图的顶部应该由名为“2016”的列驱动:
top='2016', width=0.2, source=source,

但是你的数据框/列数据源中没有这样的列。您需要配置条形图来使用实际属于您数据的列(可能是“总长度”或“测量长度”)


1
非常有道理。感谢您抽出时间来帮助我。这让我很苦恼... - dbach75

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接