python - 在 hvplot 中自定义标记列表

标签 python holoviews hvplot holoviz

我有一个像这样的数据集:

df = pd.DataFrame(np.random.rand(10,2),columns=['A','B'])
df['group'] = np.random.choice(4,size=10)
df['category'] = np.random.choice(['CC','DD'],size=10)
df['sizes'] = np.random.randint(10,50,size=10)

我想要一个 A 与 B 的散点图,其中标记由“组”列着色,标记类型基于“类别”列,标记大小基于“大小”列。

以下...

scatter = df.hvplot.scatter(x='A',y='B',color='group',padding=0.1,cmap='Set1',size='sizes')
scatter

...让我得到正确的着色,当我得到“无法为‘大小’选项声明映射”时(知道为什么吗?),我实际上得到了正确的标记大小。

但是,我似乎无法根据“类别”列获取标记类型。

我试过...

markers=['x' if zone=='DD' else 'o' for zone in df['category']]
scatter = df.hvplot.scatter(x='A',y='B',color='group',padding=0.1,cmap='Set1',size='sizes',marker=markers)
scatter

...但是它将所有点转换为十字(x),没有转换为圆(o)。

我还尝试添加一列:

df['markers'] = np.random.choice(['x','o'],size=10)

然后……

scatter = df.hvplot.scatter(x='A',y='B',color='group',padding=0.1,cmap='Set1',size='sizes',marker='markers')
scatter

...但这会引发错误并且根本不起作用。

使用 hvplot 按变量自定义标记的正确方法是什么?

感谢您的建议。


编辑 1: 现在我也尝试使用 holoviews.dim,1. 与 holoviews:

hvd = hv.Dataset(df,['A'],['B','markers'])
markers_custom = hv.dim('markers').apply(hvd)

hvd.to.scatter().opts(marker=marker)

然后 2. 再次使用 hvplot:

scatter = df.hvplot.scatter(x='A',y='B',marker=markers_custom)

我得到:

TypeError [Call holoviews.ipython.show_traceback() for details] unhashable type: 'numpy.ndarray'

...在这两种情况下。

最佳答案

上面的方法有效,但我们强烈建议不要转换您的实际数据,除非您确实需要,这就是我们引入所谓的 dim 表达式的原因,您可以阅读有关 here 的内容。 .这些使您无需接触数据即可表达复杂的转换,例如在你的例子中你可以这样做:

import holoviews as hv

df = pd.DataFrame(np.random.rand(10,2),columns=['A','B'])
df['group'] = np.random.choice(4,size=10)
df['category'] = np.random.choice(['CC','DD'],size=10)
df['sizes'] = np.random.randint(10,50,size=10)
marker = hv.dim("category").categorize({'DD': 'x'}, default='circle')

df.hvplot.scatter(x='A',y='B', color="group", size="sizes", marker=marker)

此处的转换基本上采用类别列并通过将所有“DD”值映射到“x”并将所有其他值映射到“circle”来转换它。

关于python - 在 hvplot 中自定义标记列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60625167/

相关文章:

python - 遍历 pandas 列并附加一组字典?

OOP 中的 python 属性装饰器

holoviews - 从 Datashader 绘图中选择数据

python - 每个类别的 Holoviews 颜色

python pandas 投资组合返回

python - 如何在Python中使用多线程调用同一个函数?

jupyter-notebook - 使用 reveal.js 的全息 View ( Bokeh )

python - 如何向 hvplot 添加恒定线

python - 使用 holoviews/hvplot 更改图例位置

python - Geopandas 没有属性 hvplot