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)
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)