python - 根据字典 : issue passing pandas dataframe 创建 altair 图表

标签 python pandas altair

我正在尝试以编程方式生成不同的 altair 图表。 我将使用 alt.Chart.from_dict() 根据字典设置这些不同的图表。

我已经使用现有图表执行 chart.to_dict() 对图表的整体配置进行了逆向工程,但是这种方法将数据序列化为 json,而我的数据托管在 pandas 数据框中,我正在努力寻找字典中正确的语法来传递数据框。

我尝试了以下几种变体:

d_chart_config = {
    "data": df, #or df.to_dict()
    "config": {
        "view": {"continuousWidth": 400, "continuousHeight": 300},
        "title": {"anchor": "start", "color": "#4b5c65", "fontSize": 20},
    },
    "mark": {"type": "bar", "size": 40},
    ....}

但还没有设法弄清楚如何或在何处将数据框插入字典中,无论是直接作为数据框还是作为 df.to_dict()

如果您管理过类似的事情,请提供帮助。

最佳答案

生成 Vega-Lite data 字段的纯 pandas 方法是 {"values": df.to_dict(orient="records")},但这有某些情况下的问题(即处理日期时间、分类和非标准数字和字符串类型)。

Altair 具有解决这些问题的实用程序,您可以直接使用这些实用程序,即 altair.utils.data.to_values 函数。

例如:

import pandas as pd
from altair.utils.data import to_values

df = pd.DataFrame({'a': [1, 2, 3], 'b': pd.date_range('2012', freq='Y', periods=3)})

print(to_values(df))
# {'values': [{'a': 1, 'b': '2012-12-31T00:00:00'},
#   {'a': 2, 'b': '2013-12-31T00:00:00'},
#   {'a': 3, 'b': '2014-12-31T00:00:00'}]}

您可以在包含 vega-lite 规范的字典中直接使用它并生成有效图表:

alt.Chart.from_dict({
    "data": to_values(df),
    "mark": "bar",
    "encoding": {
        "x": {"field": "a", "type": "quantitative"},
        "y": {"field": "b", "type": "ordinal", "timeUnit": "year"},
    }
})

enter image description here

关于python - 根据字典 : issue passing pandas dataframe 创建 altair 图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69479239/

相关文章:

python - 如何使用 altair 在 hconcat 图表中显示两个不同的图例

python - 规范化餐厅菜肴列表

python - 将函数传递给排序函数的键

python - 解析为 Firebase 增强型推送通知

python - 从两个列表中获取元素的所有组合?

python - 如何使用 pandas 根据行值条件更改列数据类型

python - 如何从python中的字符串中提取一定长度的数字?

python - 从数据框中随机选择列

python - Altair Hconcat - 是否可以在同一 HConCat 中为图表配置不同的轴?

python - 更改 Altair 折线图和面积图中的步长宽度