Python 如何在Altair中设置区域设置?

Python 如何在Altair中设置区域设置?,python,altair,Python,Altair,我正在Altair中成功创建并呈现一个带有货币前缀($)的图表,但我需要将其设置为GBP(£)。我知道有一个Vega-liteformatLocale可以设置,但我无法解决如何将需要的值传递给Vega-lite。我在Altair文档中找不到任何关于区域设置的内容 def图表\u月\u值(数据框=无): 图表=( alt.Chart(数据框,title=“投标价值”) .mark_bar() .编码( 备选案文X( “年-月(日期):O”, 轴=alt.axis(title=“月”) ), alt

我正在Altair中成功创建并呈现一个带有货币前缀($)的图表,但我需要将其设置为GBP(£)。我知道有一个Vega-lite
formatLocale
可以设置,但我无法解决如何将需要的值传递给Vega-lite。我在Altair文档中找不到任何关于区域设置的内容

def图表\u月\u值(数据框=无):
图表=(
alt.Chart(数据框,title=“投标价值”)
.mark_bar()
.编码(
备选案文X(
“年-月(日期):O”,
轴=alt.axis(title=“月”)
),
alt.Y(“每月总价值:Q”,
axis=alt.axis(title=“每月累计投标价值(£)”
),
工具提示=[
alt.Tooltip('total\u monthly\u value:Q',title=“total value”,format=“$,.4r”),
alt.Tooltip('median_monthly_value:Q',title=“median value”,format=“$,.4r”),
alt.Tooltip('no\u of \u tenders:Q',title=“Total tenders”,format=“,.2r”)
],
颜色='变量:N'
)
)
文本=(
图表.标记文字(align=“center”,baseline=“bottom”)
.encode(text='label:N')
.transform_calculate(label=f'格式(基准.总月值,“$,.3s”))
)
返回图表+文本

在Altair 4.0或更新版本中,可以通过渲染器嵌入选项设置格式区域设置和时间格式区域设置。区域设置是通过JSON对象设置的,JSON对象紧凑地指定了值的显示方式

  • formatLocale
    定义货币和数字格式的选项可在此处找到:

  • timeFormatLocale
    可在此处找到定义时间和日期格式的选项:

以下是将渲染器设置为使用德语(DE)时间和货币格式的示例:

import altair as alt
import pandas as pd
from urllib import request
import json

# fetch & enable a German format & timeFormat locales.
with request.urlopen('https://raw.githubusercontent.com/d3/d3-format/master/locale/de-DE.json') as f:
  de_format = json.load(f)
with request.urlopen('https://raw.githubusercontent.com/d3/d3-time-format/master/locale/de-DE.json') as f:
  de_time_format = json.load(f)
alt.renderers.set_embed_options(formatLocale=de_format, timeFormatLocale=de_time_format)

df = pd.DataFrame({
    'date': pd.date_range('2020-01-01', freq='M', periods=6),
    'revenue': [100000, 110000, 90000, 120000, 85000, 115000]
})

alt.Chart(df).mark_bar().encode(
    y='month(date):O',
    x=alt.X('revenue:Q', axis=alt.Axis(format='$,r'))
)


原始答复:

这是可能的,但不幸的是没有得到很好的支持
formatLocale()
是一个javascript函数,必须由渲染器调用。Jupyter Notebook和JupyterLab使用的Javascript代码在各自的vega扩展中进行了硬编码,因此对于在这些前端可视化的Altair图表,无法改变这一点

如果您想自己调整区域设置,最简单的方法是将图表导出为HTML(
chart.save('mychart.HTML')
),然后在HTML输出中的javascript中添加对
formatLocale
的调用


如果您想以更自动/可重复的方式执行此操作,您可以修改Altair的html输出模板(),并创建自己的导出器函数,该函数可以使用区域设置或其他自定义javascript将图表转换为html。

谢谢。这是有道理的。