4

我想绘制一个包含 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']))

这是结果(左侧没有数据着色器,右侧有数据着色器):

在此处输入图像描述

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

Datashader 文档中有一个关于时间序列绘图的教程,但它非常复杂,它datashader.transfer_functions.shade()用作操作图形的基础,而没有过多介绍它的工作原理,而且 API 也不是很清晰。我只想保留 bokeh/hvplot 默认提供的这些基本绘图功能,我不确定 datashader 不保留它们的原因,所以我不知道要修复什么。

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

4

1 回答 1

1

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

df.reset_index().melt(id_vars='datetime').hvplot.line(
    x='datetime', 
    y='value', 
    by='variable', 
    datashade=True, 
    dynamic=False,
)
于 2020-11-18T11:51:11.190 回答