altair - 选择数据会切断 Altair 图中的标签
问题描述
我有一个类似于下面代码生成的 Altair 图表。在选择任何数据之前,我可以在折线图上看到标签(下面的第一张图片)x
。t
但是,选择数据后,数字会出现在轴上并推出标签(下图第二张)。如何不让标签被切断?在我的实际问题中,x 轴和 y 轴的比例在选择之间可能会有很大差异,因此不能对所有可能的选择使用比例。
import altair as alt
import numpy as np
import pandas as pd
n_freq = 5
n_data = 1000
freqs = np.arange(1, n_freq + 1)
df_freq = pd.DataFrame({'f': freqs})
df_data = pd.DataFrame({
'f': np.repeat(a=freqs, repeats=n_data),
't': np.tile(A=np.linspace(0, 2, n_data), reps=n_freq),
})
df_data['x'] = np.sin(2 * np.pi * df_data['f'] * df_data['t'])
freq_selection = alt.selection_single(
fields=('f',),
empty='none',
on='mouseover',
nearest=True,
clear='mouseout',
)
freq_table = alt.Chart(df_freq).mark_text().encode(
y=alt.Y(shorthand='f:Q', axis=None, scale=alt.Scale(domain=(0, n_freq + 1))),
text='f:N',
).add_selection(freq_selection)
data_plot = alt.Chart(df_data).mark_line().encode(
x='t:Q',
y='x:Q',
).transform_filter(freq_selection)
alt.hconcat(freq_table, data_plot, spacing=100).properties(padding=100)
在进行选择之前:
做出选择后:
解决方案
vega-lite 渲染器通过显示数据的范围或通过显式比例域来选择轴限制。如果没有显示数据且没有刻度域,则该轴为空。
由于您不想直接设置比例域,解决此问题的一种方法是创建一些定义“默认”域的不可见数据,并将其分层到图表上。例如:
background = alt.Chart(
{"values": [{"t": 0, "x": 0}, {"t": 1, "x": 1}]}
).mark_point(opacity=0).encode(
x='t:Q',
y='x:Q'
)
alt.hconcat(freq_table, background + data_plot, spacing=100).properties(padding=100)
请注意,空图表现在具有基于此透明数据限制的轴域。
推荐阅读
- c# - 对话框在 MS BotFramework v4 的新对话中保留其变量值
- azure - 插入行时触发 Azure 逻辑应用
- python - 气流 list_dags 没有用变量识别 dag
- r - r:在函数中使用参数列表
- python - AWS Lambda 使用 python boto3 列出 EC2 实例 ID
- git - GitKraken:推送许多文件时出错(块头问题)
- mysql - 如何使用原生 sql 准备语句来准备列名
- ssis - 如何在 SSIS 中检查列的所有行是否为 NULL?
- java - 导致 SIGNAL TERM 的 Apache Beam Spark runner 侧输入
- django - 为什么 django-haystack 多次运行对象准备?