在使用streamlit时,我开始使用altair绘制数据。在使用它的过程中,我遇到了以下问题:
我想要绘制一个具有以下结构的DataFrame:
workload_df = pd.DataFrame({
'index': pd.to_datetime(['01.02.2010', '01.03.2010', '01.04.2010']),
'measure': [100, 90, 120],
'measure_max': [80, 100, 150],
})现在,我想将该度量与条形图中的max_measure进行比较:
measure_max_plot = alt.Chart(workload_df).mark_bar(color = 'lightgreen', text = 'measure_max').encode(
alt.X('index', title = '', axis = alt.Axis(labelAngle = -45, labelOverlap = False)),
alt.Y('measure_max', title = '')
)
measure_plot = alt.Chart(workload_df).mark_bar(text = 'measure').encode(
x = alt.X('index', title = 'X', axis = alt.Axis(labelAngle = -45, labelOverlap = False)),
y = alt.Y('measure', title = 'Y'),
color=alt.condition(
alt.datum.measure > alt.datum.measure_max,
alt.value('red'),
alt.value('steelblue')
)
)
altair_plot = alt.layer(measure_max_plot, measure_plot)
st.altair_chart(altair_plot, use_container_width=True)我得到的东西是这样的:

或者类似的东西:

但我希望最高的横杆总是在背景中,所以就像这样:

有人能帮我解决这个问题吗?
发布于 2021-01-15 01:24:37
层始终按照层图表中指定的顺序显示。在您的例子中,您需要measure_max_plot下面所示的measure_plot的一部分,以及上面所示的部分。您可以通过过滤和添加另一个层来完成此操作:
altair_plot = alt.layer(
measure_plot.transform_filter(alt.datum.measure > alt.datum.measure_max),
measure_max_plot,
measure_plot.transform_filter(alt.datum.measure < alt.datum.measure_max)
)

https://stackoverflow.com/questions/65722838
复制相似问题