Возможны ли участки риджлайн в vega-lite? - PullRequest
0 голосов
/ 09 октября 2019

Можно ли построить график типа this в vega-lite?

Кажется, что в документации нет концепции трехмерности. Есть ли какое-то решение, которое сделало бы возможными перекрывающиеся графики, подобные этому?

1 Ответ

0 голосов
/ 10 октября 2019

Да, хотя для этого нужно что-то делать. Вот пример использования Altair, адаптированный с https://observablehq.com/@vega/psr-b1919-21-with-vega-lite (требуется предварительная обработка источника данных, поэтому лучше использовать среду, которая выводит спецификацию Vega-Lite):

import numpy as np
import pandas as pd
import altair as alt

# Note: data is in a CSV with no header info. We first load it as a 2D array,
# and then create a one-column dataframe where each entry is a list.
# This leads to a compact data representation, from which we use Altair
# transforms to tidy the data within the chart specification.
url = 'https://gist.githubusercontent.com/borgar/31c1e476b8e92a11d7e9/raw/0fae97dab6830ecee185a63c1cee0008f6778ff6/pulsar.csv'
values = np.genfromtxt(url, delimiter=',')
df = pd.Series(values.tolist(), name='data').to_frame()

# These values tweak the spacing & overlap between lines.
step=6
overlap=12

alt.Chart(df).transform_window(
    series='row_number()'
).transform_flatten(
    ['data']
).transform_window(
    index='row_number()',
    groupby=['series']
).mark_line(
    fill='white',
    stroke='black',
    strokeWidth=1
).encode(
    x=alt.X('index:Q', axis=None),
    y=alt.Y('data:Q', scale=alt.Scale(range=[step, -overlap * (step + 1)]), axis=None),
    row=alt.Row('series:O', header=alt.Header(title=None, labelPadding=0, labelFontSize=0)),
    tooltip=None
).properties(
    width=370,
    height=step,
    bounds='flush',
    spacing=0,
    padding=0,
).configure_view(
    stroke=None,
    fill='white'
)

enter image description here

...