【问题标题】:Altair doesn't plot when the source is a Pandas DatafFame当源是 Pandas DatafRame 时,Altair 不会绘图
【发布时间】:2020-07-15 15:48:04
【问题描述】:

我无法使用 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:仅使用字符串作为标签(不带日期)也会发生同样的情况。

【问题讨论】:

    标签: python dataframe charts data-science altair


    【解决方案1】:

    数据不完全相同:字典中每种颜色只有一个条目,而 iowa 电力数据集每种颜色有很多条目。

    正如我在回复您的previous question 时提到的,每种颜色只有一个点的面积图不会显示任何内容,因为单个点下的区域宽度为零,因此是不可见的。

    您可以通过在每个组中添加多个点来确认这一点:

    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"
    )
    

    【讨论】:

    • 是否可以使用我的 DF 的所有“net_generation”值的差异作为数据点的宽度?
    • 我不确定我是否明白你在问什么。也许再问一个更详细的问题?
    猜你喜欢
    • 1970-01-01
    • 2017-02-22
    • 2013-04-03
    • 2015-06-12
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多