Altair 对应的 ggplots geom_segment

Altair's counterpart to ggplots geom_segment

在 python 数据可视化包 altair 中,我被 mark_bar 困住了。 mark_bar 似乎只能处理至少一个轴上的离散值。 然而,我想要一种类似于 ggplot 中的 geom_segment 的行为,换句话说,可以绘制水平线,指定 x-begin、x-end 和 y 的高度,如下所示:

如你所见,段也可以重叠,这就是我想要的。 使用 altair,我最近得到的是像这样使用 mark_bar:

import altair as alt
import pandas as pd

 source = pd.DataFrame([
{"importance": "1.2", "start": 1, "end": 3},
{"importance": "10", "start": 8, "end": 10},
{"importance": "1", "start": 3, "end": 8}
])

 alt.Chart(source).mark_bar().encode(
x='start',
x2='end',
y='importance'
)

给出:

当我设置
y='importance:Q'

它没有按预期工作,而是我得到:

这个问题的一部分我真的很喜欢 altairs 的简单性,我很感激任何帮助。

对于两个轴上的定量编码,默认条形方向为 "vertical"。您可以使用 orient 属性 更改此设置,并且可以使用 height 属性:

调整水平条的粗细
import altair as alt
import pandas as pd

source = pd.DataFrame([
  {"importance": "1.2", "start": 1, "end": 3},
  {"importance": "10", "start": 8, "end": 10},
  {"importance": "1", "start": 3, "end": 8}
])

alt.Chart(source).mark_bar(
  orient='horizontal',
  height=20
).encode(
  x='start:Q',
  x2='end:Q',
  y='importance:Q'
)

我自己找到的:

source = pd.DataFrame([
{"importance": "1.2", "start": 1, "end": 3 ,"i":2.2},
{"importance": "10", "start": 8, "end": 10, "i": 11},
{"importance": "1", "start": 2, "end": 8,"i": 2}
])

alt.Chart(source).mark_bar().encode(
x='start:Q',
x2='end:Q',
y='importance:Q',
y2 ='i:Q'
)

所以添加一列就足够了,它是 "importance" 的副本加上一些表示条的粗细的偏移量。