有没有人想出一种解决方法,可将字幕添加到Altair生成的图表中?

Geo*_*ard 4 python data-visualization python-3.x altair

似乎您还不能在使用Altair Python库制作的图形的标题上添加字幕。

我喜欢Altair,但是根据线程发现,Altair没有图形字幕功能。有人知道如何添加字幕吗?我想到了换行符,但似乎仍在Altair所基于的Vega / Vega-lite中添加了对此的支持。

我认为可以在这个狭窄的问题上找到所有内容...

这是Altair团队说的是Vega问题:https :
//github.com/altair-viz/altair/issues/987

这是Vega团队说它尚未修复(我认为):https :
//github.com/vega/vega-lite/issues/4055

如果您找到任何将字幕添加到标题或轴标签的方法,那将是巨大的!

mcn*_*utt 19

关于 altair/vega-lite/vega 生态系统的最好的事情之一是它的活跃程度。自从上次发布以来,整个工具链(特别是这个 pr)已经有了一些解决这个问题的发展!!

除了多行字幕外,这一变化还增加了对标题的多行支持。示例代码片段:

import altair as alt
from vega_datasets import data

chart = alt.Chart(data.cars.url).mark_point().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q',
).properties(
    title={
      "text": ["First line of title", "Second line of title"], 
      "subtitle": ["Cool first line of subtitle", "Even cooler second line wow dang"],
      "color": "red",
      "subtitleColor": "green"
    }
)
chart
Run Code Online (Sandbox Code Playgroud)

其中产生:

在此处输入图片说明


joe*_*lom 11

您还可以使用alt.TitleParams而不是手动创建字典并直接设置标题Chart而不是使用以下.properties方法:

import altair as alt
from vega_datasets import data


chart_title = alt.TitleParams(
    "Main figure title",
    subtitle=["First line that will not wrap no matter how much text it has", "Second line"],
)
alt.Chart(data.cars.url, title=chart_title).mark_point().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q'
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果打印该chart_title变量,您将看到它包含一个类似于 mcnutt 之前的答案中使用的字典。

TitleParams({
  subtitle: ['First line that will not wrap no matter how much text it has', 'Second line'],
  text: 'Main figure title'
})
Run Code Online (Sandbox Code Playgroud)

您还可以使用此技术在图表下添加类似标题的元素:

chart_title = alt.TitleParams(
    "Main figure title",
    subtitle=["First line that will not wrap no matter how much text it has", "Second line"],
    anchor='start',
    orient='bottom',
    offset=20
)
alt.Chart(data.cars.url, title=chart_title).mark_point().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q'
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我们想创建一个长标题,手动将字符串格式化为列表会非常繁琐。相反,我们可以利用该textwrap库:

from textwrap import wrap

# Inside alt.TitleParams
subtitle=wrap("First line that will not wrap no matter how much text it has unless we convert it to a list first", 40),
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


jak*_*vdp 5

Altair不支持字幕,因为呈示Altair图表的Vega-Lite库不支持字幕。

就是说,如果您愿意,可以使用图表级联来拼凑字幕之类的内容。例如:

import altair as alt
from vega_datasets import data
cars = data.cars()

title = alt.Chart(
    {"values": [{"text": "The Title"}]}
).mark_text(size=20).encode(
    text="text:N"
)

subtitle = alt.Chart(
    {"values": [{"text": "Subtitle"}]}
).mark_text(size=14).encode(
    text="text:N"
)

chart = alt.Chart(cars).mark_point().encode(
  x='Horsepower',
  y='Miles_per_Gallon',
  color='Origin'
)

alt.vconcat(
    title,
    subtitle,
    chart
).configure_view(
    stroke=None
).configure_concat(
    spacing=1
)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明