当源是 Pandas DatafFame 时,Altair 不会绘图
Altair doesn't plot when the source is a Pandas DatafFame
我无法使用 Altair 将简单的 Pandas DataFrame 绘制到面积图。关键是,如果我使用 Vega(“source = data.iowa_electricity()”)导入完全相同的 DataFrame,则该图表有效,例如。
source = {
'year': ['2001-01-01', '2002-01-01'],
'source': ['Fossil Fuels', 'Nuclear Energy'],
'net_generation': [35361, 35991]
}
source = pd.DataFrame(source) ### this DF doesn't work
chart = alt.Chart(source).mark_area(opacity=0.3).encode(
x="year",
y=alt.Y("net_generation:Q", stack=None),
color=f"source:N"
)
如果我将上面的“source”更改为“source = data.iowa_electricity()”(其中包含完全相同的数据),图表工作得很好.
我在这里错过了什么?
PS:仅使用字符串作为标签(不带日期)也会发生同样的情况。
数据不相同:字典中每种颜色只有一个条目,而爱荷华电力数据集的每种颜色有很多条目。
正如我在您 的回答中提到的,每种颜色只有一个点的面积图将不会显示任何内容,因为单个点下方的区域宽度为零,因此是不可见的。
您可以通过为每个组添加一个以上的点来确认这一点:
source = {
'year': ['2001-01-01', '2001-01-02', '2001-01-01', '2001-01-02'],
'source': ['Fossil Fuels', 'Fossil Fuels', 'Nuclear Energy', 'Nuclear Energy'],
'net_generation': [100, 500, 200, 400]
}
source = pd.DataFrame(source)
chart = alt.Chart(source).mark_area(opacity=0.3).encode(
x="year:T",
y=alt.Y("net_generation:Q", stack=None),
color="source:N"
)
我无法使用 Altair 将简单的 Pandas DataFrame 绘制到面积图。关键是,如果我使用 Vega(“source = data.iowa_electricity()”)导入完全相同的 DataFrame,则该图表有效,例如。
source = {
'year': ['2001-01-01', '2002-01-01'],
'source': ['Fossil Fuels', 'Nuclear Energy'],
'net_generation': [35361, 35991]
}
source = pd.DataFrame(source) ### this DF doesn't work
chart = alt.Chart(source).mark_area(opacity=0.3).encode(
x="year",
y=alt.Y("net_generation:Q", stack=None),
color=f"source:N"
)
如果我将上面的“source”更改为“source = data.iowa_electricity()”(其中包含完全相同的数据),图表工作得很好.
我在这里错过了什么?
PS:仅使用字符串作为标签(不带日期)也会发生同样的情况。
数据不相同:字典中每种颜色只有一个条目,而爱荷华电力数据集的每种颜色有很多条目。
正如我在您
您可以通过为每个组添加一个以上的点来确认这一点:
source = {
'year': ['2001-01-01', '2001-01-02', '2001-01-01', '2001-01-02'],
'source': ['Fossil Fuels', 'Fossil Fuels', 'Nuclear Energy', 'Nuclear Energy'],
'net_generation': [100, 500, 200, 400]
}
source = pd.DataFrame(source)
chart = alt.Chart(source).mark_area(opacity=0.3).encode(
x="year:T",
y=alt.Y("net_generation:Q", stack=None),
color="source:N"
)