我希望能够做这样的事情 -注意:你看到的水平线不是在 y=0 处,而是在 y=1 处
但使用color
或fill
编码condition
在面积图中并不真正有效。
我得到的最接近的是使用yOffset
(命中并尝试以获得完美值),但mark_area
最大的问题是 y 轴保持不变,因此图表实际上变得无效。
示例:(
忽略水平连接的图表 - 这只是为了能够得出一个好的值,因为yOffset
y 轴根本不移动。)
import pandas as pd
data = pd.DataFrame({'date': pd.date_range(start='1/1/2018', end='1/11/2018'), 'stock': [0.1, 0.3, 0.9, 1, 1.5, 1.2, 0.8, 1.1, 0.4, 0.8, 1.6]})
left = alt.Chart(data).mark_area().encode(
x='date:T',
y='stock:Q',
fill = alt.condition(alt.datum.stock<1, alt.value('grey'), alt.value('red'))
)
right = alt.Chart(data).mark_area(yOffset=190, ).encode(
x='date:T',
y='stock:Q',
fill = alt.condition(alt.datum.stock<1, alt.value('grey'), alt.value('red'))
)
left | right
输出
右侧的图表非常接近 - y 轴值和颜色是错误的。
有没有办法在 Altair 中做这样的事情?
编辑1:我尝试了这篇文章
中的想法,它有点相似,但它并不像我想象的那样工作 -
trial1 = alt.Chart(data).mark_area().transform_calculate(below=alt.datum.stock<=1).encode(
x='date:T',
y=alt.Y('stock:Q'),
color = 'below:N'
)
trial2 = alt.Chart(data).mark_area().transform_calculate(below=alt.datum.stock<=1).encode(
x='date:T',
y=alt.Y('stock:Q', impute={'value': 1}),
color = 'below:N'
)
trial1|trial2
输出
素胚勾勒不出你
相关分类