Проблема заключается в том, что согласно грамматике altair
кодирование формы будет назначать новую форму каждой категории. Целью кодирования является различие между категориями, поэтому имеет смысл назначить каждой категории новую форму.
Когда вы хотите кодировать много категорий, используя только две формы, вы теряете информацию, и это сновацель кодирования в altair
.
Итак, если вы хотите, чтобы первые две категории были кругом, а последняя - ромбом, вы можете создать в своем наборе данных еще один столбец, который явно кодирует это.
Это проблема с данными (т. Е. Решена с использованием pandas
), а не проблема с altair
.
В приведенном ниже примере кода я назвал новый столбец shape
import altair as alt
import pandas as pd
myData = {'category':['Cat 1','Cat 2','Cat 3'],
'shape':['c','c','d'],
'valueX':['10','20','30'],
'valueY':['10','20','30']}
df = pd.DataFrame(data=myData)
alt.Chart(df).mark_point().encode(
x = 'valueX',
y = 'valueY',
shape = alt.Shape('shape', scale=alt.Scale(range=['circle','diamond']))
)