首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义hvplot中的标记列表

自定义hvplot中的标记列表
EN

Stack Overflow用户
提问于 2020-03-10 20:07:26
回答 2查看 1.1K关注 0票数 2

我有这样的数据集:

代码语言:javascript
复制
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的散点图,用'group‘列着色的标记,基于’类别‘列的标记’类型,基于‘尺寸’列的标记大小。

下面的..。

代码语言:javascript
复制
scatter = df.hvplot.scatter(x='A',y='B',color='group',padding=0.1,cmap='Set1',size='sizes')
scatter

...gets给我正确的颜色,虽然我得到了一个“不能为‘大小’选项声明映射”(知道原因吗?),我实际上得到了正确的标记大小。

但是,我似乎无法获得基于“类别”列的标记类型。

我试过..。

代码语言:javascript
复制
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)。

我还试着添加了一个专栏:

代码语言:javascript
复制
df['markers'] = np.random.choice(['x','o'],size=10)

然后..。

代码语言:javascript
复制
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.与全息视图:

代码语言:javascript
复制
hvd = hv.Dataset(df,['A'],['B','markers'])
markers_custom = hv.dim('markers').apply(hvd)

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

然后,2.再次使用hvplot:

代码语言:javascript
复制
scatter = df.hvplot.scatter(x='A',y='B',marker=markers_custom)

我得到:

TypeError调用holoviews.ipython.show_traceback()以获取无法查询的详细信息类型:'numpy.ndarray‘

...in两种情况。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-18 21:43:20

上面的方法是可行的,但是我们非常建议您不要转换实际的数据,除非您确实需要,这就是为什么我们引入了所谓的dim表达式,您可以阅读有关这里的内容。这些可以让您表达复杂的转换,而不必触摸数据,例如在您的示例中可以这样做:

代码语言:javascript
复制
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’和将所有其他值映射到‘循环’来转换它。

票数 4
EN

Stack Overflow用户

发布于 2020-03-13 22:06:14

它适用于我使用一个自定义列:

代码语言:javascript
复制
import numpy as np, pandas as pd, holoviews as hv, hvplot.pandas
hv.extension("bokeh")
np.random.seed(3)

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)
df['marker'] = df.category.replace("DD","x").replace("CC","circle")

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60625167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档