Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Bokeh图未显示_Python_Plot_Visualization_Bokeh - Fatal编程技术网

Python Bokeh图未显示

Python Bokeh图未显示,python,plot,visualization,bokeh,Python,Plot,Visualization,Bokeh,我试图使用堆叠的水平条生成甘特图样式的绘图,但是当我显示()绘图时,页面为空,我在js控制台中得到的错误是SCRIPT5007:无法获取未定义或空引用的属性“length”。我可以查看其他Bokeh图,例如Bokeh文档中的堆叠垂直条示例 这是我用来创建绘图的代码 from bokeh.plotting import figure, show, output_notebook, output_file from bokeh.models import ColumnDataSource, Rang

我试图使用堆叠的水平条生成甘特图样式的绘图,但是当我显示()绘图时,页面为空,我在js控制台中得到的错误是
SCRIPT5007:无法获取未定义或空引用的属性“length”
。我可以查看其他Bokeh图,例如Bokeh文档中的堆叠垂直条示例

这是我用来创建绘图的代码

from bokeh.plotting import figure, show, output_notebook, output_file
from bokeh.models import ColumnDataSource, Range1d

grouped=df.groupby('Org')
source=ColumnDataSource(grouped)

p=figure(title='Project Schedule', x_axis_type='datetime', y_range=grouped['Org'],
    x_range=Range1d(df.Start.min(),df.Finish.max()))



p.hbar_stack('Task', y='Org', height=0.9, source=source)

show(p)
以及我使用的数据样本,在一个数据帧中

   Org Task      Start     Finish
0   o1   t1 2019-11-19 2019-11-23
1   o1   t2 2019-11-23 2019-11-27
2   o1   t3 2019-11-27 2019-12-01
3   o1   t4 2019-12-02 2019-12-06
4   o2   t1 2019-11-20 2019-11-24
5   o2   t2 2019-11-24 2019-11-28
6   o2   t3 2019-12-01 2019-12-05
7   o2   t4 2019-12-05 2019-12-09
8   o3   t1 2019-11-20 2019-11-24
9   o3   t2 2019-11-24 2019-11-28
10  o3   t3 2019-12-01 2019-12-05
11  o3   t4 2019-12-05 2019-12-09

您可以这样做smth(Bokeh v1.3.0):

但是它工作得不太好,需要更多的逻辑来计算毫秒的时差,我想


您是否检查了浏览器中的javascript控制台?在bokeh的例子中,它通常包含有用的错误消息。答案可能在于您如何摄取数据,而您没有包括这些数据。
Start
Finish
值实际上是日期时间值(它们必须是),还是仅仅是普通字符串?
Start
Finish
是日期时间值,它们在读取后用
pd.转换为_datetime()
。浏览器JS控制台中有消息吗?如果没有一个完整的复制程序进行实际调查,就不可能进行更多的推测。
SCRIPT5007:无法获取未定义或空引用的属性“length”
是我在JS控制台中遇到的错误。在这段代码之外是生成日期和数据框的逻辑,下面的示例数据框或Tony的代码应该可以弥补这一点。所有与bokeh相关的代码都在上面
from bokeh.plotting import figure, show, output_notebook, output_file
from bokeh.models import ColumnDataSource, Range1d
from bokeh.core.properties import value
import pandas as pd

df = pd.DataFrame({'Org': ['o1', 'o1','o1','o1', 'o2','o2','o2','o2','o3','o3','o3','o3'],
                   'Task': ['t1', 't2','t3','t4', 't1', 't2','t3','t4','t1', 't2','t3','t4'],
                   'Start': pd.date_range('2019-02-24', periods=4*3, freq='D'),
                   'Finish': pd.date_range('2019-03-24', periods=4*3, freq='D')})
df['Diff'] = df['Finish'] - df['Start']

x = df['Task'].unique().tolist()
y = df['Org'].unique().tolist()

data1 = {'y': y}
data2 = {t: [df['Diff'][j + i % 4] for j in range(len(y))] for i, t in enumerate(x)}
data = {**data1, **data2}

p = figure(title='Project Schedule', y_range = y, x_axis_type='datetime')
p.hbar_stack(x, y='y', height=0.9, color=['red', 'blue', 'orange', 'green'], legend=[value(k) for k in x], source=data)

show(p)