我有这样的数据集:
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‘列着色的标记,基于’类别‘列的标记’类型,基于‘尺寸’列的标记大小。
下面的..。
scatter = df.hvplot.scatter(x='A',y='B',color='group',padding=0.1,cmap='Set1',size='sizes')
scatter...gets给我正确的颜色,虽然我得到了一个“不能为‘大小’选项声明映射”(知道原因吗?),我实际上得到了正确的标记大小。
但是,我似乎无法获得基于“类别”列的标记类型。
我试过..。
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.与全息视图:
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调用holoviews.ipython.show_traceback()以获取无法查询的详细信息类型:'numpy.ndarray‘
...in两种情况。
发布于 2020-03-18 21:43:20
上面的方法是可行的,但是我们非常建议您不要转换实际的数据,除非您确实需要,这就是为什么我们引入了所谓的dim表达式,您可以阅读有关这里的内容。这些可以让您表达复杂的转换,而不必触摸数据,例如在您的示例中可以这样做:
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’和将所有其他值映射到‘循环’来转换它。
发布于 2020-03-13 22:06:14
它适用于我使用一个自定义列:
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")

https://stackoverflow.com/questions/60625167
复制相似问题