python - 使用数据着色器绘制时间序列图

标签 python time-series data-visualization bokeh datashader

我的目标是利用数据着色器绘制时间序列数据,并在可能的情况下使用 Bokeh 或数据着色器本身使其具有交互性。

我尝试遵循本教程 - http://datashader.org/user_guide/3_Timeseries.html并想出了显示在 url 页面末尾的图表。

代码如下:

n = 100000
points = 10
data = np.random.normal(0, 100, size = (n, points))
df = ds.utils.dataframe_from_multiple_sequences(np.arange(points), data)
cvs = ds.Canvas(plot_height=400, plot_width=1000)
agg = cvs.line(df, 'x', 'y', ds.count())   
img = tf.shade(agg, how='eq_hist')

在上面的代码中形成了一个图像对象,现在我如何利用这个 img 对象使它成为一个交互式图形(使用 Bokeh 或数据着色器)显示 x 和 y 轴,显示悬停在每个点的细节图表并带有放大和缩小功能。

另外,上面的数据框有多个列,但为了绘制,多列被添加为数据框中的行,由数据框中的 NA 行分隔(如上面的代码所示)。是否可以在交互式图形中绘制不同颜色的列,以便在数据着色器图形中轻松区分列。

请帮忙。

最佳答案

使用 HoloViews 很容易从中制作交互式 Bokeh 图:

import datashader as ds, numpy as np, holoviews as hv
from holoviews.operation.datashader import datashade

n = 100000
points = 10
data = np.random.normal(0, 100, size = (n, points))
df = ds.utils.dataframe_from_multiple_sequences(np.arange(points), data)

hv.extension("bokeh")
datashade(hv.Curve(df)).options(width=1000)

Unzoomed

Zoomed

对于着色,你需要多少种不同的颜色?人类无法区分 100,000 种颜色,但我正在研究 https://github.com/pyviz/colorcet/issues/11获得至少几百种可区分的颜色。如果您只需要几十个(例如按类别着色)现有的颜色循环应该可以正常工作。数据会以某种方式首先需要指明类别...

关于python - 使用数据着色器绘制时间序列图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52730204/

相关文章:

java - 在 Java 中可视化数据

python - 使用 Pandas 查找时间序列中方差最小的部分/窗口

python - Python 中的 HTTP 请求和 JSON 解析

java - 只是想知道 spring mvc 与 django 之间的区别

Python PyQt4 每 1 分钟更新一次小部件上的数据

matlab - 时间序列聚合效率

python - 避免在 Seaborn 中绘制缺失值

python - 如何更改 Seaborn 中轴的字体大小

c# - 在 for 循环中计算特定事件的有效方法

即使保留副本后,Python 嵌套字典也会被覆盖