散景ColumnDataSource行未呈现

时间:2019-01-03 11:46:41

标签: python-3.x pandas csv bokeh

我有一个带有时间和日期值的SCV,但散景线不会渲染。

我遵循了本教程(https://programminghistorian.org/en/lessons/visualizing-with-bokeh)的观点,显示了第一个散点图,它对bokeh和大熊猫有所了解,因为我对Python和程序设计非常陌生。 这在我的jupyter笔记本电脑上工作正常。

所以我想用我自己的数据来尝试一下,女巫是随着时间推移的流侦听器计数。在弄清楚如何正确地将csv导入到pandas.DataFrame之后,我不得不弄乱“日期”和“时间”列中的数据,以将字符串设置为datetime64值。

数据现在看起来像这样:

         Date      Time  Count
0      01.01.2012  00:00:00     69
1      01.01.2012  00:01:00     65
2      01.01.2012  00:02:00     65
3      01.01.2012  00:03:00     65

但是,如果我将“日期”或“时间”以及“计数”一起输入到散景图中,则会得到一个空行,没有行。轴标签和标题正确显示。

我检查了不同的浏览器,以确保它不是浏览器问题。我还尝试不使用ColumnDataSource,而是使用给出相同结果的列表。但是如果我定义了两个这样的简短列表

x = [1, 2, 3, 4]
y = [1, 2, 3, 4]

并使用它们代替行的“时间”或“日期”。

我试图在熊猫和散景文档中找到有关如何使用ColumnDataFrame和线条字形的说明,但对我来说似乎应该绘制图形。

我怀疑原始数据可能存在一些我无法发现的缺陷?在查看.csv时,我找不到丢失的条目之类的东西。

代码如下:

import pandas
from bokeh.plotting import figure, show
from bokeh.io import output_notebook, output_file
from bokeh.models import ColumnDataSource
output_notebook()

data = pandas.read_csv('listener.csv', delimiter=",", usecols= [1, 2, 3], names=["Date", "Time", "Count"])

data["Date"].astype("datetime64")
data["Time"].astype("datetime64")

source = ColumnDataSource(data)
p = figure(title="Title", x_axis_label="Date",x_axis_type="datetime", y_axis_label="Listener")
p.line(x="Time", y="Count", source=source, line_width=2)
output_file("plot.html")

show(p)

由于在上面提到的教程中,所有工作均正常进行,并且使用了基本相同的代码,所以我希望根据输入,随着时间或日期的变化,行会很漂亮。但是我得到的是一个空洞的情节。

1 个答案:

答案 0 :(得分:1)

借助Josh Friedlander的帮助,我可以解决我的问题以及一些我在实验中遇到的问题。因此,这是我的解决方案,我使用parse_dates将列“ Date”和“ Time”组合到一个具有数据类型“ datetime64”的列中。由于欧洲日期格式的原因,还使用了“ dayfirst”。

data = pandas.read_csv(
        "filename",
        delimiter=",",
        usecols=[1, 2, 3],
        names=["Date", "Time", "Count"],
        parse_dates=[["Date", "Time"]], 
        dayfirst=True)

这已经过时了。

data["Date"].astype("datetime64")
data["Time"].astype("datetime64")