使用 Holoviews 向绘图添加长名称和单位的优雅方式

An elegant way to add long names and units to plots with Holoviews

我已经开始将 Holoviews 与 Python3 和 Jupyter notebooks 一起使用,我正在寻找一种在我的绘图轴上放置长名称和单位的好方法。示例如下所示:

import holoviews as hv
import pandas as pd
from IPython.display import display
hv.notebook_extension()

dataframe = pd.DataFrame({"time": [0, 1, 2, 3],
                          "photons": [10, 30, 20, 15],
                          "norm_photons": [0.33, 1, 0.67, 0.5],
                          "rate": [1, 3, 2, 1.5]}, index=[0, 1, 2, 3])
hvdata = hv.Table(dataframe, kdims=["time"])
display(hvdata.to.curve(vdims='rate'))

这给了我一个很好的情节,但不是 x 轴上的 'time' 和 y 轴上的 'rate',我更喜欢 'Time (ns)' 和 'Rate (1/s)',但我不想每次都在代码中输入它。 我发现 this blog post by PhilippJFR 哪种方法可以满足我的需要,但他使用的 DFrame() 函数已贬值,因此我想尽可能避免使用它。有什么想法吗?

事实证明这很容易做到,但很难在文档中找到。您只需传递 holoviews.Dimension 而不是字符串作为 kdims 参数:

hvdata = hv.Table(dataframe, kdims=[hv.Dimension('time', label='Time', unit='ns')])
display(hvdata.to.curve(vdims=hv.Dimension('rate', label='Rate', unit='1/s')))

您可以在这个 SO 问题中找到好的替代方案:

我喜欢这样做:
使用变量名称和您希望在绘图上打印的长名称创建一个元组:

hvdata = hv.Table(
    dataframe,
    kdims=[('time', 'Time (ns)')],
    vdims=[('rate', 'Rate (1/s)')],
)