为什么 go.Scatter 打印额外的行而 px.line 不是?

Why is go.Scatter printing extra lines whereas px.line is not?

这是我的 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)

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

如果没有适当的数据样本,我无法 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()