python - 如何跳过 Bokeh 图中的数据点?

标签 python plot bokeh skip

考虑以下代码:

from datetime import datetime as dt
from bokeh.io import output_file, show
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource

output_file("plot_dates.html")

p = figure(x_axis_type='datetime')

data = dict(
    dates=[dt(2015, 1, 1), dt(2015, 1, 2), dt(2015, 1, 3)],
    values=[1,2,3])
source = ColumnDataSource(data)

p.line('dates', 'values', source=source)

show(p)

这会显示一条正确的线。 如果现在我想跳过一点,例如第二个我希望在日期或值(或两者)中设置元素会导致跳过一个点。 不幸的是,情况并非如此,但 None 显示为“0”,对于日期而言,它转换为 1970-01-01。是否有一种简单的方法来跳过数据,或者必须手动完成(或通过单独的库)?

我知道使用 pandas 过滤掉包含 None 元素的行/列可以或多或少轻松地完成此操作,但我无法使用它。

最佳答案

根据您的意思,您可以使用 NaN 值(而不是 None)来执行此操作。但您必须使用 NumPy,既用于 np.nan,又确保数组经过正确编码,以便能够将 NaN 值传输到浏览器中。

此外,您还需要更多积分。当线数据中有 NaN 值时,两侧的线段都会被跳过,因此只有三个点,根本不会绘制任何内容,因为没有完整的点任何地方的分段。通过五点你可以看出:

import numpy as np
from datetime import datetime as dt
from bokeh.io import output_file, show
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource

output_file("plot_dates.html")

p = figure(x_axis_type='datetime')

data = dict(
    dates=[dt(2015, 1, 1), dt(2015, 1, 2), dt(2015, 1, 3), dt(2015, 1, 4), dt(2015, 1, 5)],
    values=np.array([1.0, 3.0, np.nan, 5.0, 4.0]))
source = ColumnDataSource(data)

p.line('dates', 'values', source=source)

show(p)

enter image description here

编辑:这也可以使用 CDSView 来完成,而无需将任何 NaN 值放入:

view = CDSView(source=source, filters=[IndexFilter([0, 1, 3, 4])]) 
p.line('dates', 'values', source=source, view=view)

从你的问题中并不清楚“跳过”的含义。如果您的意思是有没有一种方法可以简单地画线,就好像该点根本不存在一样,即没有 NaN 或过滤器给出的中断,那么答案是“否”。您需要预先过滤您的数据。

关于python - 如何跳过 Bokeh 图中的数据点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51563338/

相关文章:

python - x-y 平面上的热图,以 z 为权重

Linux (Ubuntu 11.10) 中的 Matlab 在绘图中不显示 Unicode(希伯来语)

python - 试图将多边形数据分成 x 和 y 坐标,但得到错误 "' MultiPolygon' 对象没有属性 'exterior'”

python - Python 脚本中的 Bash 源

python - Scipy - 稀疏库导入错误 : DLL load failed: %1 is not a valid Win32 application

python - 如何限制/偏移 sqlalchemy orm 关系的结果?

python - 在mako模板中迭代嵌套的dict

matlab - 在直方图上绘制线条

python - 如何在holoviews + bokeh中获得带有图例标签的全高垂直线?

python - pandas + bokeh - 如何获取悬停工具的数据框列名称