Python 带标签的牵牛星流图
我能够在Altair中生成一个漂亮的流图,并且希望添加标签而不是图例。我遵循了这个示例,但它似乎为每个数据点指定了一个标签Python 带标签的牵牛星流图,python,altair,Python,Altair,我能够在Altair中生成一个漂亮的流图,并且希望添加标签而不是图例。我遵循了这个示例,但它似乎为每个数据点指定了一个标签 import altair as alt from vega_datasets import data source = data.unemployment_across_industries.url stream = ( alt.Chart(source) .mark_area() .encode( alt.X(
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')
您可以创建一个数据框,专门用于标签:
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')
您正在指定
month(date)
作为文本的x编码,这意味着您希望每个月都有一个文本标记。如果需要单个文本标记,则应使用聚合或单个值。我会回答你的问题,但你还没有弄清楚你的预期产出是什么。你希望文本标记出现在哪里?我希望标签在每一个区域的中间,像这样:根据你所看到的数据,这是相当简单的,但是看起来上面的代码中没有足够的空间把标签放在每一个区域。我只是以这些数据为例,在我的实际数据集中我有更多的空间。也许我从Tableau的角度来处理这个问题太多了,我不一定要使用它,但我想知道它作为PoC是如何工作的。您正在指定month(date)
作为文本的x编码,这意味着您希望每个月都有一个文本标记。如果需要单个文本标记,则应使用聚合或单个值。我会回答你的问题,但你还没有弄清楚你的预期产出是什么。你希望文本标记出现在哪里?我希望标签在每一个区域的中间,像这样:根据你所看到的数据,这是相当简单的,但是看起来上面的代码中没有足够的空间把标签放在每一个区域。我只是以这些数据为例,在我的实际数据集中我有更多的空间。也许我从图表的角度来处理这个问题太多了,我不一定要使用这个,但我想知道它作为PoC是如何工作的。