python - Altair 图层图 Y 轴未解析为相同比例
问题描述
我正在尝试绘制数据并将其与设置为固定值的阈值进行比较。创建layer
ed图表时,y 轴似乎不适用于两个图层。也是如此hconcat
。
我发现这个问题提到.resolve_scale(y='shared')
了,但这似乎不起作用。当我将规则指定为 5 时,它出现在 15 之上。
np.random.seed(42)
df = pd.DataFrame({
'x': np.linspace(0, 10, 500),
'y': np.random.randn(500).cumsum()
})
base = alt.Chart(df)
line = base.mark_line().encode(x='x', y='y')
rule = base.mark_rule().encode(y=alt.value(5))
alt.layer(line, rule).resolve_scale(y='shared')
为了让规则出现在值 5 处,我必须将其设置为 110。
rule = base.mark_rule().encode(y=alt.value(110))
alt.layer(line, rule).resolve_scale(y='shared')
如何编辑图表以使规则显示在指定的 y 值处?
解决方案
Altair 天平将域映射到范围。域描述了数据值的范围,而范围描述了这些值映射到的视觉特征的范围。对于颜色编码,范围可能是"red"
、"blue"
、等。对于像和之类的"green"
位置编码,范围是图表上标记的像素位置。x
y
使用 时alt.value
,您指定的是范围值,而不是域值。这就是您可以使用 , 之类的编码color=alt.value('red')
来指定您希望标记显示为红色的原因。当你这样做时y=alt.value(5)
,你是说你希望标记出现在距离 y 轴顶部 5 个像素处。
Vega-Lite 的最新版本增加了通过datum
而不是指定域值的能力value
,但不幸的是 Altair 还不支持这一点,因此实现这项工作的唯一方法是拥有一个具有所需值的数据字段。例如:
line = base.mark_line().encode(x='x', y='y')
rule = alt.Chart(pd.DataFrame({'y': [5]})).mark_rule().encode(y='y')
alt.layer(line, rule).resolve_scale(y='shared')
推荐阅读
- java - 是否可以在单个项目中的 Maven 模块下添加 Apache Ant 模块作为依赖项
- javascript - 通过单击父项填充 iframe 输入字段
- java - 测试 Java Web 应用程序库的依赖关系
- sql - 选择行直到运行总和达到特定值
- dropbox - 使用 Dropbox 选择器 API 时出现错误 400
- sql - 在 Firebird 数据库上使用 SQL 标记满足特定条件的记录
- python - Dynamodb 扫描停止并使用 LastEvaluatedKey 返回结果
- ios - 什么是 iOS 中的构建对象文件扩展名?
- java - Java 8 可选:在两个可能为空的值之间进行选择
- java - 如何解决 alfresco sdk 中的 alfresco webscripts 中的 CORS 错误?