【问题标题】:Timeseries with multiple colors and legend using Datashader and Holoviews使用 Datashader 和 Holoviews 具有多种颜色和图例的时间序列
【发布时间】:2020-11-18 02:10:07
【问题描述】:

我想绘制一个包含 3 列的时间序列数据框,每条曲线各一列。我希望每条曲线都有自己的颜色并显示一个图例,就像hvplot() 默认情况下所做的那样。

这是一个独立的例子:

import numpy as np
import pandas as pd
import hvplot.pandas
import datetime
from holoviews.operation.datashader import datashade

n=1000
start = datetime.datetime(2010, 10, 1, 0)   # Start time
datetimerange = [start + datetime.timedelta(minutes=1)*i for i in range(n)]
A = np.random.randint(5, size=n)
B = np.random.randint(20, 40, size=n)
C = np.random.randint(10, 20, size=n)
d = {'datetime': datetimerange, 'A': A, 'B': B, 'C': C}
df = pd.DataFrame(d).set_index('datetime')

df.hvplot(cmap=['red', 'blue', 'green']) + datashade(df.hvplot(cmap=['red', 'blue', 'green']))

这是结果(左边没有datashader,右边有datashader):

将绘图传递给数据着色器时,颜色和图例会丢失。使用hvplot 的datashade=True 参数具有相同的结果。

有a tutorial on timeseries plotting in the Datashader documentation,但它相当复杂,它使用datashader.transfer_functions.shade() 作为操作图表的基础,而没有过多介绍其工作原理和the API isn't much clearer。我只想保留 bokeh/hvplot 默认提供的这些基本绘图功能,我不确定 datashader 不保留它们的原因,所以我不知道要修复什么。

如何向数据着色器发送信号以保留不同的颜色并绘制图例?

【问题讨论】:

  • 也许您也可以在discourse.holoviz.org 上提问,这也是该软件包的开发人员也回答问题的地方。如果他们有更好的答案,你也可以在这里发布吗?我也很好奇:)

标签: python data-visualization holoviews datashader


【解决方案1】:

这是答案的一半,不幸的是,这并没有给出传说。请注意.hvplot() 有参数datashade=True 内置:

df.reset_index().melt(id_vars='datetime').hvplot.line(
    x='datetime', 
    y='value', 
    by='variable', 
    datashade=True, 
    dynamic=False,
)

【讨论】:

  • 此 hvplot 解决方案不会对组进行不同的着色。这是错误还是 hvplot 参数的错误使用?
  • @fmfreeze:我写了我给出了一半的答案,所以我不知道如何解决。但可以在这里找到更好的答案:discourse.holoviz.org/t/…
  • @SandervandenOord 非常感谢!我接受了您的回答,因为您的评论链接到完整的答案,请您将其添加为您的答案的附录吗?
猜你喜欢
  • 2019-05-30
  • 2018-11-17
  • 2021-03-25
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多