为啥 go.Scatter 打印额外的行而 px.line 不是?
Posted
技术标签:
【中文标题】为啥 go.Scatter 打印额外的行而 px.line 不是?【英文标题】: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)
(另外,如何像在第二张图中那样对第一张图中的每一行进行颜色编码?)
【问题讨论】:
【参考方案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()
【讨论】:
啊!这很有意义。说明为什么情节表达是一种祝福(直到你必须做子情节)以上是关于为啥 go.Scatter 打印额外的行而 px.line 不是?的主要内容,如果未能解决你的问题,请参考以下文章