creating an altair chart based on a dictionary : issue passing pandas 数据框
creating an altair chart based on a dictionary : issue passing pandas dataframe
我正在尝试以编程方式生成不同的 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"},
}
})
我正在尝试以编程方式生成不同的 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"},
}
})