Альтаирский аналог ggplots geom_segment - PullRequest
1 голос
/ 20 марта 2020

В пакете визуализации данных питонов altair я застрял с mark_bar. Кажется, что mark_bar может обрабатывать только дискретные значения по крайней мере на одной оси. Однако я хочу, чтобы поведение, похожее на geom_segment в ggplot, другими словами, возможность рисовать горизонтальные линии с указанием x-begin, x-end и высоты по y, например: Example

Как видите, сегменты также могут перекрываться, что я и хочу. Используя Альтаир, я ближе всего получаю, используя 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'
)

, что дает:

Altair example

Когда я установил
y='importance:Q'

это не работает должным образом, вместо этого я получаю:

Altair example 2

Часть этой проблемы я действительно я люблю простоту, и я ценю любую помощь в этом.

Ответы [ 2 ]

4 голосов
/ 20 марта 2020

При количественном кодировании по обеим осям ориентация стержня по умолчанию равна "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'
)

enter image description here

0 голосов
/ 20 марта 2020

Я нашел это сам:

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'
)

Так что достаточно добавить столбец, который является копией "важности" плюс некоторое смещение, которое представляет толщину столбцов.

...