在 Altair 中连接两个图表时控制图例颜色和顺序
Control legend color and order when joining two charts in Altair
我很难获得图例中颜色的正确顺序。
我正在努力达到:
cash: blue
fixed_income: yellow
equity: red
我正在使用以下数据框绘制两行三张图表 'dfl':
trade_date account owner account_type asset value sort_asset
0 2002-01-02 p2_inv p2 inv cash 0.0 0
1 2002-01-03 p2_inv p2 inv cash 0.0 0
2 2002-01-04 p2_inv p2 inv cash 0.0 0
dfl.shape (76824, 7)
我有以下代码:
df_p1 = dfl[dfl['owner'] == 'p1']
df_p2 = dfl[dfl['owner'] == 'p2']
base_p1 = alt.Chart(df_p1).mark_area().encode(
x=alt.X('trade_date:T', title=""),
y=alt.Y('sum(value):Q', stack='normalize', title="Asset Allocation"),
color=alt.Color('asset:N', sort=['cash', 'fixed_income', 'equity']),
order=alt.Order('sort_asset:N', sort='ascending')
).properties(
width=120,
height=160
).facet(
column=alt.Column('account:N'),
)
base_p2 = alt.Chart(df_p2).mark_area().encode(
x=alt.X('trade_date:T', title=""),
y=alt.Y('sum(value):Q', stack='normalize', title="Asset Allocation"),
color=alt.Color('asset:N', sort=['cash', 'fixed_income', 'equity']),
order=alt.Order('sort_asset:N', sort='ascending')
).properties(
width=120,
height=160
).facet(
column=alt.Column('account:N'),
)
base_p1 & base_p2
当我自己 运行 base_p1 或 base_p2 时,我得到了正确的图例。但是当我使用 & 将它们连接在一起时,我的图例和颜色变为:
cash: blue
equity: yellow
fixed income: red
我还注意到我在 DataFrame 中添加了一个 sort_asset 列,我可以使用它来正确排序资产,并且我正在使用它来确保堆栈被正确排序。
我确定我错过了一些简单的东西,因为我是 altair 的新手。我可以在上面的代码中更改什么以呈现正确的颜色和顺序?
这是 Altair 版本 2 中的一个已知错误:已排序的字段不会保留在复合图表中。一些细节(包括解决方法的想法)在这里:https://github.com/altair-viz/altair/issues/820
Altair 3.0 修复了这个错误,应该会在下周的某个时候发布。
我很难获得图例中颜色的正确顺序。
我正在努力达到:
cash: blue
fixed_income: yellow
equity: red
我正在使用以下数据框绘制两行三张图表 'dfl':
trade_date account owner account_type asset value sort_asset
0 2002-01-02 p2_inv p2 inv cash 0.0 0
1 2002-01-03 p2_inv p2 inv cash 0.0 0
2 2002-01-04 p2_inv p2 inv cash 0.0 0
dfl.shape (76824, 7)
我有以下代码:
df_p1 = dfl[dfl['owner'] == 'p1']
df_p2 = dfl[dfl['owner'] == 'p2']
base_p1 = alt.Chart(df_p1).mark_area().encode(
x=alt.X('trade_date:T', title=""),
y=alt.Y('sum(value):Q', stack='normalize', title="Asset Allocation"),
color=alt.Color('asset:N', sort=['cash', 'fixed_income', 'equity']),
order=alt.Order('sort_asset:N', sort='ascending')
).properties(
width=120,
height=160
).facet(
column=alt.Column('account:N'),
)
base_p2 = alt.Chart(df_p2).mark_area().encode(
x=alt.X('trade_date:T', title=""),
y=alt.Y('sum(value):Q', stack='normalize', title="Asset Allocation"),
color=alt.Color('asset:N', sort=['cash', 'fixed_income', 'equity']),
order=alt.Order('sort_asset:N', sort='ascending')
).properties(
width=120,
height=160
).facet(
column=alt.Column('account:N'),
)
base_p1 & base_p2
当我自己 运行 base_p1 或 base_p2 时,我得到了正确的图例。但是当我使用 & 将它们连接在一起时,我的图例和颜色变为:
cash: blue
equity: yellow
fixed income: red
我还注意到我在 DataFrame 中添加了一个 sort_asset 列,我可以使用它来正确排序资产,并且我正在使用它来确保堆栈被正确排序。
我确定我错过了一些简单的东西,因为我是 altair 的新手。我可以在上面的代码中更改什么以呈现正确的颜色和顺序?
这是 Altair 版本 2 中的一个已知错误:已排序的字段不会保留在复合图表中。一些细节(包括解决方法的想法)在这里:https://github.com/altair-viz/altair/issues/820
Altair 3.0 修复了这个错误,应该会在下周的某个时候发布。