我一直在尝试了解如何完成绘制两个数据集的这个非常简单的任务,每个数据集都有不同的颜色,但我在网上找到的似乎都没有。这是一些示例代码:
import pandas as pd
import numpy as np
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')
ds1x = np.random.randn(1000)
ds1y = np.random.randn(1000)
ds2x = np.random.randn(1000) * 1.5
ds2y = np.random.randn(1000) + 1
ds1 = pd.DataFrame({'dsx' : ds1x, 'dsy' : ds1y})
ds2 = pd.DataFrame({'dsx' : ds2x, 'dsy' : ds2y})
ds1['source'] = ['ds1'] * len(ds1.index)
ds2['source'] = ['ds2'] * len(ds2.index)
ds = pd.concat([ds1, ds2])
目标是在单个帧中生成两个数据集,并使用分类列跟踪源。然后我尝试绘制散点图。
scatter = hv.Scatter(ds, 'dsx', 'dsy')
scatter
这按预期工作。但我似乎无法理解如何根据source
列对两个数据集进行不同的着色。我尝试了以下方法:
scatter = hv.Scatter(ds, 'dsx', 'dsy', color='source')
scatter = hv.Scatter(ds, 'dsx', 'dsy', cmap='source')
两者都抛出警告并且没有颜色。我试过这个:
scatter = hv.Scatter(ds, 'dsx', 'dsy')
scatter.opts(color='source')
这会引发错误。我尝试将事物转换为 Holoviews 数据集,相同类型的事物。
为什么本应如此简单的事情却如此晦涩难懂?
PS 是的,我知道我可以拆分数据并覆盖两个散点图,这将给出不同的颜色。但肯定有一种方法可以基于分类数据来实现这一点。