如何使用altair突出显示散点图中的标记?

时间:2019-03-03 01:51:04

标签: python python-3.x altair

我正在尝试将下面以seaborn构造的图形复制到altair。我可以在其中标记某些点,即群集中的预测点。

enter image description here

altair中的图层功能似乎是方向。

替代示例

import altair as alt
import pandas as pd

source = pd.DataFrame({
    'x': [1, 3, 5, 7, 9],
    'y': [1, 3, 5, 7, 9],
    'label': ['A', 'B', 'C', 'D', 'E']
})

bars = alt.Chart(source).mark_point().encode(
    x='x:Q',
    y='y:Q'
)

text = bars.mark_text(
    align='left',
    baseline='middle',
    dx=7
).encode(
    text='label'
)

bars + text

但是我不能只选择一些要在中间用黑点标记的点。

谢谢

1 个答案:

答案 0 :(得分:1)

这可以通过对包含要显示的数据的两个图表进行分层来完成。这是一个包含scikit-learn生成的一些数据的示例,因为您没有提供任何示例数据:

import altair as alt
import pandas as pd
from sklearn.datasets import make_blobs

X, labels = make_blobs(20, random_state=1)
points = pd.DataFrame({
    'x': X[:, 0],
    'y': X[:, 1],
    'labels': labels
})
centers = points.groupby('labels').mean()
data = pd.concat([points , centers.reset_index()])

chart1 = alt.Chart(data).mark_point(filled=True, size=150).encode(
    x='x',
    y='y',
    color='labels:N'
)

chart2 = alt.Chart(centers).mark_point(filled=True, size=50).encode(
    x='x',
    y='y',
    color=alt.value('black')
)

chart1 + chart2

enter image description here