У меня есть набор данных, подобный:
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', и с типом маркеров, основанным на 'category' столбец, размер маркера на основе столбца «размеры».
Следующее ...
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 [Вызовите holoviews.i python .show_traceback () для подробностей] unhashable тип: 'numpy .ndarray'
... в обоих случаях.