如何在 Altair 上的交互式 Scatter 上添加文本?
How to add text on interactive Scatter on Altair?
我尝试改编来自 altair 文档 (https://altair-viz.github.io/gallery/select_detail.html#selection-detail-example) 的选择详细信息示例。
我不会详细说明我的 Dataframe 结构,它与示例中的相同(包括变量名)。
本机代码运行良好:
# Data is prepared, now make a chart
selector = alt.selection_single(empty='all', fields=['id'])
base = alt.Chart(data).properties(
width=250,
height=250
).add_selection(selector)
points = base.mark_point(filled=True, size=200,opacity=0.9).encode(
x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
y=alt.Y('mean(x)',title='Taux de marge (%PM)'),
color=alt.condition(selector, 'id:O', alt.value('lightgray')),
tooltip = ['mean(y)','mean(x)']
)
timeseries = base.mark_bar(opacity=1).encode(
x=alt.X('time', title='Items'),
y=alt.Y('value', scale=alt.Scale(domain=(-1, 1)),stack=None),
color=alt.Color('id:O',scale=alt.Scale(domain=domain, range=range_))
#, legend=None)
).transform_filter(
selector
)
points | timeseries
在这个阶段没问题,即使当没有选择时隐藏右图上的所有条形图可能很有用在右图上(不知道它是否可能吗?)
之后,我尝试将文本添加到散点图中,在代码末尾添加:
text = points.mark_text(dy=-5).encode(
x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
y=alt.Y('mean(x)',title='NBV (%CA)'),
text='id:O'
)
(points + text) | timeseries
这会导致以下错误消息:
Javascript 错误:信号名称重复:“selector094_tuple”
这通常意味着您的图表规范中存在拼写错误。请参阅 javascript 控制台以获取完整的回溯。
如果您有任何关于如何做的想法,我将不胜感激
谢谢
问题是您不能将相同的选区添加到两个不同的图层,您可以通过从 points
派生 text
来隐式地执行此操作。试试这个:
text = alt.Chart(data).mark_text(dy=-5).encode(
x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
y=alt.Y('mean(x)',title='NBV (%CA)'),
text='id:O'
)
(points + text) | timeseries
我尝试改编来自 altair 文档 (https://altair-viz.github.io/gallery/select_detail.html#selection-detail-example) 的选择详细信息示例。
我不会详细说明我的 Dataframe 结构,它与示例中的相同(包括变量名)。
本机代码运行良好:
# Data is prepared, now make a chart
selector = alt.selection_single(empty='all', fields=['id'])
base = alt.Chart(data).properties(
width=250,
height=250
).add_selection(selector)
points = base.mark_point(filled=True, size=200,opacity=0.9).encode(
x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
y=alt.Y('mean(x)',title='Taux de marge (%PM)'),
color=alt.condition(selector, 'id:O', alt.value('lightgray')),
tooltip = ['mean(y)','mean(x)']
)
timeseries = base.mark_bar(opacity=1).encode(
x=alt.X('time', title='Items'),
y=alt.Y('value', scale=alt.Scale(domain=(-1, 1)),stack=None),
color=alt.Color('id:O',scale=alt.Scale(domain=domain, range=range_))
#, legend=None)
).transform_filter(
selector
)
points | timeseries
在这个阶段没问题,即使当没有选择时隐藏右图上的所有条形图可能很有用在右图上(不知道它是否可能吗?)
之后,我尝试将文本添加到散点图中,在代码末尾添加:
text = points.mark_text(dy=-5).encode(
x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
y=alt.Y('mean(x)',title='NBV (%CA)'),
text='id:O'
)
(points + text) | timeseries
这会导致以下错误消息:
Javascript 错误:信号名称重复:“selector094_tuple” 这通常意味着您的图表规范中存在拼写错误。请参阅 javascript 控制台以获取完整的回溯。
如果您有任何关于如何做的想法,我将不胜感激
谢谢
问题是您不能将相同的选区添加到两个不同的图层,您可以通过从 points
派生 text
来隐式地执行此操作。试试这个:
text = alt.Chart(data).mark_text(dy=-5).encode(
x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
y=alt.Y('mean(x)',title='NBV (%CA)'),
text='id:O'
)
(points + text) | timeseries