如何迭代散点数据?
How to iterate over scatter data?
我正在尝试使用 Plotly Express 在带有下拉框的散点图上绘制时间序列。我在数据的“名称”列中过滤了一些唯一值的 2 条轨迹。我在 px.scatter 上使用 'color' 函数按此列进行过滤。由于迹线具有相同的名称,它们在图上是重复的,我无法分辨哪个迹线属于哪个 'color'。
我想根据颜色更改每个名称。我正在尝试遍历 fig.data,因为我能够将我的值存储在列表 labels
中(见下文)但未能成功遍历迹线的名称,因为它是散点类型.
早些时候,我可以通过以下方式对其进行硬编码,但是,我需要它是动态的:
fig.data[0]['name'] = "color1 var1"
fig.data[1]['name'] = "color2 var1"
fig.data[2]['name'] = "color1 var2"
fig.data[3]['name'] = "color2 var2"
为了使其动态化,我尝试了这个并且能够更新值,但每个值都更新为我列表中的最后一个值。我想按列表的顺序更新每个值。不知道该怎么做。
labels = df['name'].unique().tolist()
for i in range(len(labels)):
x = labels[i]+" Color2"
labels.append(x)
for n in fig.data:
for i in n:
for q in range(len(labels)):
if i == 'name':
n[i] = labels[q]
这是我用于下拉图的代码(数据是时间序列):
def tsplot(title,df):
# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])
labels = df['name'].unique().tolist() #for var1
for i in range(len(labels)):
x = labels[i]+" for var2"
labels.append(x)
# Add traces
trace1 = px.scatter(df, x="day", y="campaign_cpc", color="display_env_name", hover_name="display_env_name",
color_discrete_sequence=px.colors.qualitative.Set3).update_traces(
mode="lines")
trace2 = px.scatter(df, x="day", y="market_cpc", color="display_env_name", hover_name='display_env_name',
color_discrete_sequence=px.colors.qualitative.Antique,).update_traces(
mode="lines")
trace2.update_traces(yaxis="y2")
fig.add_traces(trace1.data + trace2.data)
buttons = [{"label": t.name,
"method": "update",
"args": [{"visible": [t2.legendgroup == t.legendgroup for t2 in fig.data]}],
} for t in fig.data[0:3]]
fig.update_layout(
updatemenus=[
{ "y": 1.1,
"buttons": buttons,
"active": 0
}
]
)
我找到了使用 for 循环更改跟踪名称的解决方案。
请注意:df['color']
默认包含 var1。添加var2时,我们不需要删除var1。
labels = df['color'].unique().tolist()
for i in range(len(labels)):
x = labels[i]+" var2"
labels.append(x)
for n in range(len(fig.data)):
fig.data[n].name = labels[n]
我正在尝试使用 Plotly Express 在带有下拉框的散点图上绘制时间序列。我在数据的“名称”列中过滤了一些唯一值的 2 条轨迹。我在 px.scatter 上使用 'color' 函数按此列进行过滤。由于迹线具有相同的名称,它们在图上是重复的,我无法分辨哪个迹线属于哪个 'color'。
我想根据颜色更改每个名称。我正在尝试遍历 fig.data,因为我能够将我的值存储在列表 labels
中(见下文)但未能成功遍历迹线的名称,因为它是散点类型.
早些时候,我可以通过以下方式对其进行硬编码,但是,我需要它是动态的:
fig.data[0]['name'] = "color1 var1"
fig.data[1]['name'] = "color2 var1"
fig.data[2]['name'] = "color1 var2"
fig.data[3]['name'] = "color2 var2"
为了使其动态化,我尝试了这个并且能够更新值,但每个值都更新为我列表中的最后一个值。我想按列表的顺序更新每个值。不知道该怎么做。
labels = df['name'].unique().tolist()
for i in range(len(labels)):
x = labels[i]+" Color2"
labels.append(x)
for n in fig.data:
for i in n:
for q in range(len(labels)):
if i == 'name':
n[i] = labels[q]
这是我用于下拉图的代码(数据是时间序列):
def tsplot(title,df):
# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])
labels = df['name'].unique().tolist() #for var1
for i in range(len(labels)):
x = labels[i]+" for var2"
labels.append(x)
# Add traces
trace1 = px.scatter(df, x="day", y="campaign_cpc", color="display_env_name", hover_name="display_env_name",
color_discrete_sequence=px.colors.qualitative.Set3).update_traces(
mode="lines")
trace2 = px.scatter(df, x="day", y="market_cpc", color="display_env_name", hover_name='display_env_name',
color_discrete_sequence=px.colors.qualitative.Antique,).update_traces(
mode="lines")
trace2.update_traces(yaxis="y2")
fig.add_traces(trace1.data + trace2.data)
buttons = [{"label": t.name,
"method": "update",
"args": [{"visible": [t2.legendgroup == t.legendgroup for t2 in fig.data]}],
} for t in fig.data[0:3]]
fig.update_layout(
updatemenus=[
{ "y": 1.1,
"buttons": buttons,
"active": 0
}
]
)
我找到了使用 for 循环更改跟踪名称的解决方案。
请注意:df['color']
默认包含 var1。添加var2时,我们不需要删除var1。
labels = df['color'].unique().tolist()
for i in range(len(labels)):
x = labels[i]+" var2"
labels.append(x)
for n in range(len(fig.data)):
fig.data[n].name = labels[n]