我想制作一条图表,其中一条线在其沿线的不同位置具有不同的颜色。
这不起作用:
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')
(我想要一条连续的线,而不是一束线段。)
大概的问题是Altair(或Vega-Lite)决定按颜色分组,并为每组绘制单独的线。
我可以覆盖此默认分组以说整行应该是一个分组吗?
为了进行比较,在R的ggplot2库the group
argument would do what I'm looking for中。
答案 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更加复杂。
仍然希望有人能够明确回答用户是否可以控制分组。