小编woo*_*ine的帖子

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

我已成功在 Altair 中创建并渲染带有货币前缀 ($) 的图表,但我需要将其设置为 GBP (\xc2\xa3)。我知道有一个formatLocale可以设置的 Vega-lite,但我不知道如何将我需要的值传递给 Vega-lite。我在 Altair 文档中找不到有关区域设置的任何内容。

\n\n
   def chart_tenders_monthly_value(dataframe=None):\n        chart = (\n            alt.Chart(dataframe, title="Tender value")\n                .mark_bar()\n                .encode(\n                alt.X(\n                    "yearmonth(date):O",\n                     axis=alt.Axis(title="Month") \n                     ),\n                alt.Y("total_monthly_value:Q",\n                     axis=alt.Axis(title="Monthly cumulative tender value (\xc2\xa3)") \n                     ),\n                tooltip=[\n                    alt.Tooltip(\'total_monthly_value:Q\', title="Total value", format="$,.4r"), \n                    alt.Tooltip(\'median_monthly_value:Q\', title="Median value", format="$,.4r"),\n                    alt.Tooltip(\'no_of_tenders:Q\', title="Total tenders", format=",.2r")\n                ],\n                color = \'variable:N\'\n            )\n        )\n\n        text = (\n            chart.mark_text(align="center", baseline="bottom")\n            .encode(text=\'label:N\')\n            .transform_calculate(label=f\'format(datum.total_monthly_value,"$,.3s")\')\n        )\n        return chart+text\n
Run Code Online (Sandbox Code Playgroud)\n\n

渲染图表的屏幕截图

\n

python altair

6
推荐指数
1
解决办法
1041
查看次数

在 Altair 中设置条形图上的标签格式

[![图表显示没有正确格式的数字][1]][1]

我需要格式化这些条上的标签,以便将它们四舍五入到最接近的整数。我有以下代码:

def chart_tender_response_times(dataframe=None):

        chart = (
            alt.Chart(dataframe, title="Median time to respond to a tender")
                .mark_bar()
                .encode(
                alt.X("year(date):O"
                ),
                alt.Y("mean(median_duration):Q",
                     ## This is our units section, only describe the units of measurement here.
                     axis=alt.Axis(title="Unit: days.")
                ),
                alt.Tooltip(["mean(median_duration):Q"], format=",.2r", title="Days to respond to a tender")
            )
        )

        text = (
            chart.mark_text(align="center", baseline="bottom")
            .encode(text='mean(median_duration):Q')
        )

        return chart+text
Run Code Online (Sandbox Code Playgroud)

我尝试了以下变体...

text = (
            chart.mark_text(align="center", baseline="bottom")
            .encode(text='mean(median_duration):Q', format='.,2r')
        )
Run Code Online (Sandbox Code Playgroud)

但这会返回以下架构验证错误:

SchemaValidationError: Invalid specification

altair.vegalite.v3.api.Chart, validating 'required'

'data' is a required property
Run Code Online (Sandbox Code Playgroud)

我的直觉是,在将值添加到图表之前,我必须以某种方式调用和格式化该值,但我无法从文档或示例中看到如何执行此操作。

vega-lite altair

4
推荐指数
1
解决办法
4594
查看次数

Python,CSV,根据内容跳线

我正在处理标题前带有缓冲区行的 csv 文件,行数各不相同,有些行包含字符串,有些行不包含。唯一一致的是,这些缓冲区行在一个或多个单元格中都包含空值,因此我试图跳过具有空单元格的任何行。

我有以下脚本,但它正在输出一个空白文件。我猜我没有进入“其他”,但我猜如果我把它放在一个循环中,我最终会为每一行创建一个文件......

with open(fileName, 'rb') as inf, open("out_"+fileName, 'wb') as outf:
    csvreader = csv.DictReader(inf)

    if '' in csvreader.fieldnames:
        next(csvreader)
    else:
        fieldnames = ['url_source','downloaded_at'] + csvreader.fieldnames  # add column names to beginning
        csvwriter = csv.DictWriter(outf, fieldnames)
        csvwriter.writeheader()
        for node, row in enumerate(csvreader, 1):
            csvwriter.writerow(dict(row, url_source=csvUrl, downloaded_at=today))
    return
Run Code Online (Sandbox Code Playgroud)

python csv

2
推荐指数
1
解决办法
1458
查看次数

Altair / vega-lite 设置条件文本值的格式

我已成功向 Altair 图表添加自动工具提示,但无法将文本格式设置为货币。

这是我的代码:

contracts = {'date': ['2015-11-12','2020-11-11','2018-02-28','2021-02-27','2019-04-01','2021-03-31','2016-07-02','2019-11-01','2019-04-23','2019-10-14'],
        'type': ['Start date','End date','Start date','End date','Start date','End date','Start date','End date','Start date','End date',],
        'value': [2200000,2200000,250000,250000,127000,127000,35000,35000,148723,148723],
        'supplier': ['Capita','Capita','Deloitte','Deloitte','KPMG','KPMG','Herbert Smith','Herbert Smith','Spend Network','Spend Network'],
        'buyer': ['DWP','DWP','MOD','MOD','HMRC','HMRC','MOJ','MOJ','DFID','DFID']
        }

df = pd.DataFrame(contracts, columns=['date','type','value','supplier','buyer'])

# Create a selection that chooses the nearest point & selects based on x-value
nearest = alt.selection(type='single', nearest=True, on='mouseover',
                        fields=['date'], empty='none')

chart = alt.Chart(df, title="Pipeline").mark_point().encode(
    alt.X(
        'date:T',
        scale=alt.Scale(zero=False),
        axis=alt.Axis(grid=False)
    ),
    alt.Y(
        'supplier:N',
        title="",
        sort=alt.EncodingSortField(field='yield', op='sum', order='descending'),
        scale=alt.Scale(rangeStep=20),
        axis=alt.Axis(grid=True)
    ),
    alt.Size('value:Q',
        scale=alt.Scale(range=[40, 400]),
        legend=alt.Legend(title='Contract size')
    ), …
Run Code Online (Sandbox Code Playgroud)

python vega-lite altair

1
推荐指数
1
解决办法
2930
查看次数

标签 统计

altair ×3

python ×3

vega-lite ×2

csv ×1