覆盖altair的折线图默认分组?

时间:2020-01-21 15:14:54

标签: python altair

我想制作一条图表,其中一条线在其沿线的不同位置具有不同的颜色。

这不起作用:

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)决定按颜色分组,并为每组绘制单独的线。

我可以覆盖此默认分组以说整行应该是一个分组吗?

为了进行比较,在R的ggplot2库the group argument would do what I'm looking for中。

1 个答案:

答案 0 :(得分:1)

这里是一个黑客,基本上可以得到我想要的剧情:

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我希望我的点组成一条直线,而是通过使用额外的(移位的)数据副本在每对点之间创建一个单独的段。 / p>

线段的颜色基于每个线段的左点,我想这有点误导(如果只有几个点,则非常容易误导)。您可以通过将颜色设为两侧的平均值来使hack更加复杂。

enter image description here

仍然希望有人能够明确回答用户是否可以控制分组。