带标签的 Altair 流图
Altair stream graph with labels
我能够在 Altair 中生成一个漂亮的流图,并且想添加标签而不是图例。我按照这个例子 https://altair-viz.github.io/gallery/stacked_bar_chart_with_text.html,但它似乎为每个数据点分配了一个标签。
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries.url
stream = (
alt.Chart(source)
.mark_area()
.encode(
alt.X(
"yearmonth(date):T", axis=alt.Axis(format="%Y", domain=False, tickSize=0)
),
alt.Y("sum(count):Q", stack="center", axis=None),
alt.Color("series:N", scale=alt.Scale(scheme="category20b")),
)
)
text = (
alt.Chart(source)
.mark_text(dx=-15, dy=3, color='white')
.encode(
alt.X(
"yearmonth(date):T", axis=alt.Axis(format="%Y", domain=False, tickSize=0)
),
alt.Y("sum(count):Q", stack="center", axis=None),
alt.Color("series:N", scale=alt.Scale(scheme="category20b")),
detail="series:N",
text=alt.Text("series:N", format=".1f"),
)
)
stream + text
或者我试过这个,但它变得更糟。
text = stream.mark_text(
align="left",
baseline="middle",
dx=3,
).encode(text="series:N")
如有任何帮助,我们将不胜感激。
您可以创建一个专门用于标记的数据框:
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries().query("series in ['Agriculture', 'Finance']")
stream = (
alt.Chart(source)
.mark_area()
.encode(
alt.X("yearmonth(date):T", axis=alt.Axis(format="%Y")),
alt.Y("sum(count):Q", stack="center", axis=None),
alt.Color("series:N", scale=alt.Scale(scheme="category20b"))))
text_df = pd.DataFrame({'x': ['2005', '2005'], 'y': [650, 450], 'text': ['Agriculture', 'Finance']})
stream + alt.Chart(text_df).mark_text(color='white').encode(
x='x:T',
y='y',
text='text')
我能够在 Altair 中生成一个漂亮的流图,并且想添加标签而不是图例。我按照这个例子 https://altair-viz.github.io/gallery/stacked_bar_chart_with_text.html,但它似乎为每个数据点分配了一个标签。
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries.url
stream = (
alt.Chart(source)
.mark_area()
.encode(
alt.X(
"yearmonth(date):T", axis=alt.Axis(format="%Y", domain=False, tickSize=0)
),
alt.Y("sum(count):Q", stack="center", axis=None),
alt.Color("series:N", scale=alt.Scale(scheme="category20b")),
)
)
text = (
alt.Chart(source)
.mark_text(dx=-15, dy=3, color='white')
.encode(
alt.X(
"yearmonth(date):T", axis=alt.Axis(format="%Y", domain=False, tickSize=0)
),
alt.Y("sum(count):Q", stack="center", axis=None),
alt.Color("series:N", scale=alt.Scale(scheme="category20b")),
detail="series:N",
text=alt.Text("series:N", format=".1f"),
)
)
stream + text
或者我试过这个,但它变得更糟。
text = stream.mark_text(
align="left",
baseline="middle",
dx=3,
).encode(text="series:N")
如有任何帮助,我们将不胜感激。
您可以创建一个专门用于标记的数据框:
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries().query("series in ['Agriculture', 'Finance']")
stream = (
alt.Chart(source)
.mark_area()
.encode(
alt.X("yearmonth(date):T", axis=alt.Axis(format="%Y")),
alt.Y("sum(count):Q", stack="center", axis=None),
alt.Color("series:N", scale=alt.Scale(scheme="category20b"))))
text_df = pd.DataFrame({'x': ['2005', '2005'], 'y': [650, 450], 'text': ['Agriculture', 'Finance']})
stream + alt.Chart(text_df).mark_text(color='white').encode(
x='x:T',
y='y',
text='text')