mirror of
https://github.com/aykhans/AzSuicideDataVisualization.git
synced 2025-04-22 10:28:02 +00:00
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""
|
|
Multi-Line Tooltip
|
|
==================
|
|
This example shows how you can use selections and layers to create a
|
|
tooltip-like behavior tied to the x position of the cursor.
|
|
If you are looking for more standard tooltips, it is recommended to use the
|
|
tooltip encoding channel as shown in the
|
|
`Scatter Plot With Tooltips <https://altair-viz.github.io/gallery/scatter_tooltips.html>`_
|
|
example.
|
|
|
|
The following example employs a little trick to isolate the x-position of the
|
|
cursor: we add some transparent points with only an x encoding (no y encoding)
|
|
and tie a *nearest* selection to these, tied to the "x" field.
|
|
"""
|
|
# category: interactive charts
|
|
import altair as alt
|
|
import pandas as pd
|
|
import numpy as np
|
|
|
|
np.random.seed(42)
|
|
source = pd.DataFrame(np.cumsum(np.random.randn(100, 3), 0).round(2),
|
|
columns=['A', 'B', 'C'], index=pd.RangeIndex(100, name='x'))
|
|
source = source.reset_index().melt('x', var_name='category', value_name='y')
|
|
|
|
# Create a selection that chooses the nearest point & selects based on x-value
|
|
nearest = alt.selection(type='single', nearest=True, on='mouseover',
|
|
fields=['x'], empty='none')
|
|
|
|
# The basic line
|
|
line = alt.Chart(source).mark_line(interpolate='basis').encode(
|
|
x='x:Q',
|
|
y='y:Q',
|
|
color='category:N'
|
|
)
|
|
|
|
# Transparent selectors across the chart. This is what tells us
|
|
# the x-value of the cursor
|
|
selectors = alt.Chart(source).mark_point().encode(
|
|
x='x:Q',
|
|
opacity=alt.value(0),
|
|
).add_selection(
|
|
nearest
|
|
)
|
|
|
|
# Draw points on the line, and highlight based on selection
|
|
points = line.mark_point().encode(
|
|
opacity=alt.condition(nearest, alt.value(1), alt.value(0))
|
|
)
|
|
|
|
# Draw text labels near the points, and highlight based on selection
|
|
text = line.mark_text(align='left', dx=5, dy=-5).encode(
|
|
text=alt.condition(nearest, 'y:Q', alt.value(' '))
|
|
)
|
|
|
|
# Draw a rule at the location of the selection
|
|
rules = alt.Chart(source).mark_rule(color='gray').encode(
|
|
x='x:Q',
|
|
).transform_filter(
|
|
nearest
|
|
)
|
|
|
|
# Put the five layers into a chart and bind the data
|
|
alt.layer(
|
|
line, selectors, points, rules, text
|
|
).properties(
|
|
width=600, height=300
|
|
)
|