переопределить группировку Альтаира по умолчанию для линейного графика? - PullRequest
1 голос
/ 21 января 2020

Я хотел бы сделать диаграмму с одной линией разного цвета в разных точках вдоль линии.

Это не работает:

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

x = np.linspace(0,1)
y = x**2
c = np.round(x*20)
df = pd.DataFrame({'x': x, 'y': y, 'c': c})
print(df.head())
alt.Chart(df).mark_line().encode(x='x', y='y', color='c')

chart

(я хочу одну непрерывную линию, а не кучку сегментов.)

Предположительно, проблема в том, что Altair (или Vega-Lite) решил сгруппировать по цвету и нарисовать отдельная строка для каждой группы.

Можно ли переопределить эту группу по умолчанию, чтобы сказать, что вся строка должна быть одной группой?

Для сравнения, в библиотеке ggplot2 R group Аргумент будет делать то, что я ищу .

1 Ответ

1 голос
/ 22 января 2020

Вот хак, чтобы получить в основном сюжет, который я искал:

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

x = np.linspace(0,1)
y = x**2
c = np.round(x*20)
df = pd.DataFrame({'x': x, 'y': y, 'c': c})
df_shifted = df.shift()
df_shifted['c'] = df['c']
alt.Chart(pd.concat([df, df_shifted])).mark_line().encode(x='x', y='y', color='c')

Этот подход не дает Altair / Vega-Lite сказать, что я хочу, чтобы мои очки составляли одну строку, а вместо этого делает один отдельный сегмент между каждой парой точек, используя дополнительную (смещенную) копию данных.

Сегмент линии окрашен на основе левой точки в каждом сегменте, что, как мне кажется, немного вводит в заблуждение (очень вводить в заблуждение, если было только несколько баллов). Вы можете сделать хак более сложным, сделав цвет средним для двух сторон.

enter image description here

Все еще надеясь, что кто-то определенно ответит на вопрос, сможет ли пользователь контролировать группировку.

...