Bokeh- datetime x_range:'ValueError,无法识别的范围输入'

pandas

1个回答

写回答

Charlie hen

2025-07-05 21:05

+ 关注

Python
Python

Bokeh是一个用于创建交互式数据可视化的强大Python库。它提供了丰富的工具和功能,使得数据分析师和科学家能够以直观和易懂的方式呈现数据。然而,在使用Bokeh时,我们有时可能会遇到一些错误和问题。本文将探讨一个常见的问题,即在使用Bokeh的datetime x_range时可能出现的"ValueError: unrecognized range input"错误。

当我们想要在Bokeh中创建一个基于时间的x轴范围时,我们通常会使用datetime类型的数据。这可以是一个包含时间戳的列表或数组。我们可以通过将这些时间戳传递给Bokeh的x_range参数来指定x轴的范围。然而,有时我们可能会遇到一个错误,即"ValueError: unrecognized range input"。

这个错误的原因是我们没有正确地指定x_range的范围输入。Bokeh对于datetime类型的范围输入有一些特定的要求。我们需要确保我们的时间戳是以递增的方式排列的,并且它们必须是有效的datetime对象。如果我们的时间戳不满足这些要求,就会出现"unrecognized range input"错误。

为了更好地理解这个问题,让我们来看一个具体的例子。假设我们有一个包含一周时间内每天气温的数据集。我们想要使用Bokeh创建一个基于时间的折线图来展示这些数据。我们首先需要导入必要的库和模块,并生成一些随机的时间戳和对应的气温数据。

Python

import datetime

import random

from bokeh.plotting import figure, show

# 生成一周时间内的随机气温数据

start_date = datetime.datetime(2022, 1, 1)

end_date = start_date + datetime.timedelta(days=6)

dates = [start_date + datetime.timedelta(days=i) for i in range(7)]

temperatures = [random.randint(0, 30) for _ in range(7)]

现在我们有了一周的时间戳和对应的气温数据。接下来,我们需要创建一个Bokeh图形对象,并将时间戳和气温数据传递给它。

Python

# 创建一个Bokeh图形对象

p = figure(x_axis_type='datetime')

# 将时间戳和气温数据添加到图形对象中

p.line(dates, temperatures)

# 显示图形

show(p)

当我们运行这段代码时,我们可能会遇到"ValueError: unrecognized range input"错误。这是因为我们没有正确地指定x_range的范围输入。为了解决这个问题,我们需要将时间戳转换为有效的datetime对象,并确保它们是按递增顺序排列的。

为了解决这个问题,我们可以使用NumPy库中的datetime64类型来处理时间戳。我们可以通过将时间戳转换为datetime64类型的数组来解决"unrecognized range input"错误。

Python

import numpy as np

# 将时间戳转换为datetime64类型的数组

dates_np = np.array(dates, dtype='datetime64')

# 创建一个Bokeh图形对象

p = figure(x_axis_type='datetime')

# 将datetime64类型的数组和气温数据添加到图形对象中

p.line(dates_np, temperatures)

# 显示图形

show(p)

现在,我们的代码应该能够正常运行,没有出现"unrecognized range input"错误。我们成功地使用Bokeh创建了一个基于时间的折线图,展示了一周内每天的气温数据。通过将时间戳转换为datetime64类型的数组,我们确保了x_range的范围输入是有效的,并且按递增顺序排列的。

使用Bokeh的datetime x_range时可能会出现"ValueError: unrecognized range input"错误。这通常是因为我们没有正确地指定x_range的范围输入。为了解决这个问题,我们需要将时间戳转换为有效的datetime对象,并确保它们是按递增顺序排列的。通过使用NumPy库中的datetime64类型来处理时间戳,我们可以避免这个错误并成功创建基于时间的可视化图形。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号