【问题标题】:Why is go.Scatter printing extra lines whereas px.line is not?为什么 go.Scatter 打印额外的行而 px.line 不是?
【发布时间】:2021-06-27 18:34:11
【问题描述】:

这是我的 graph_objects 代码-

go.Figure(go.Scatter(x=continent_df.date, y=continent_df.new_cases_smoothed))

而我的 plotly express 代码是这样的 -

px.line(continent_df, x='date', y='new_cases_smoothed', color='continent')

为什么第一张图会为每个大陆打印额外的直线?我已经尝试对数据框进行排序。

continent_df.sort_values(['continent','date'], inplace=True)

(另外,如何像在第二张图中那样对第一张图中的每一行进行颜色编码?)

【问题讨论】:

    标签: python plotly data-visualization plotly-python


    【解决方案1】:

    如果没有适当的数据样本,我无法 100% 确定。但您的数据集似乎是一个长格式,continent_df.new_cases_smoothed 中有多个值属于不同的客户。您正在使用 go.Figure(go.Scatter(x=continent_df.date, y=continent_df.new_cases_smoothed)) 将所有这些值分配给单个跟踪。

    直线之所以存在,是因为只有一条线来回穿梭,涵盖所有类别和所有索引。当它回到开头并开始显示新类别时,会出现直线的直线部分

    但是,在这里使用px.line 可以通过使用color='continent' 对大陆进行分组来解决这个问题。因此,使值类别显示为唯一的痕迹。

    我们可以使用 gapminder 数据集(其结构类似于您的真实数据)来说明如何使用 fig.add_traces(go.Scatter()) 将单个跟踪分配给 go.Figure。关键是检索唯一的类别,对数据进行子集化,并逐行添加组。与使用 px.line 相比,这无疑为您提供了更大的灵活性。

    情节

    代码

    import plotly.graph_objs as go
    import plotly.express as px
    import pandas as pd
    
    # Data
    gap = px.data.gapminder()
    
    fig = go.Figure()
    for c in gap['country'].unique()[:10]:
        df = gap[gap['country']==c]
        fig.add_traces(go.Scatter(x=df['year'], y = df['lifeExp'], name = c))
        
    fig.show()
    

    【讨论】:

    • 啊!这很有意义。说明为什么情节表达是一种祝福(直到你必须做子情节)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2017-08-29
    • 2021-09-26
    • 2013-09-23
    相关资源
    最近更新 更多