如何命名和着色不同的轨迹绘图对象?

How to name and color different traces plotly graph objects?

我在使用绘图对象时遇到以下问题: 我目前正在处理航空公司数据。 我的目标是创建一个气泡图/散点图,我可以在其中显示哪家航空公司、旅行了多远以及他们需要多少次航班。

问题是,我无法获得正确匹配图例的点数。

df = pd.read_csv(PATH, sep=',')
df_grouped_Distance_Sum = df.groupby('AIRLINE')["DISTANCE"].sum()
print(df_grouped_Distance_Sum)

df_grouped_Flights = df.groupby('AIRLINE')["counter"].sum()
print(df_grouped_Flights)


hover_text = []

for index, row in df.iterrows():
    hover_text.append(('Airline: {AIRLINE}').format(AIRLINE=row['AIRLINE']))

df['hover_text'] = hover_text
# creating a dict to map the airline-names
airline_names = ['AA - American Airlines', 'AS - Alaska Airlines', 'B6 - JetBlue Airways', 'DL - Delta Air Lines Inc.', 'EV - Atlantic Southeast Airlines', 'F9 - Frontier Airlines Inc.',
                 'HA - Hawaiian Airlines Inc.', 'MQ - American Eagle Airlines Inc.', 'NK - Spirit Air Lines', 'OO - Skywest Airlines Inc.', 'UA - United Air Lines Inc.', 'US - US Airways Inc.', 'VX - Virgin America', 'WN - Southwest Airlines Co.']

airline_data = {airline: df.query("AIRLINE == '%s'" % airline)
                for airline in airline_names}

fig = go.Figure()

for airline_name, airline in airline_data.items():
    fig.add_trace(go.Scatter(y=df_grouped_Flights,
                             x=df_grouped_Distance_Sum, name=airline_name))

fig.update_traces(mode='markers')


fig.show()

As seen in the picture all points on the graph are named and colored as the last Airline

例如左下角的点应该是 HA - Hawaiian Airlines 和粉色而不是紫色..

那么我该如何更改它,使所有积分都与正确的航空公司匹配?

创建图表的数据已正确创建,因此请替换它。在散点图的循环过程中指定航空公司名称。

import plotly.graph_objects as go
import pandas as pd
import numpy as np
import random

airline_names = ['AA - American Airlines', 'AS - Alaska Airlines', 'B6 - JetBlue Airways', 'DL - Delta Air Lines Inc.', 'EV - Atlantic Southeast Airlines', 'F9 - Frontier Airlines Inc.',
                 'HA - Hawaiian Airlines Inc.', 'MQ - American Eagle Airlines Inc.', 'NK - Spirit Air Lines', 'OO - Skywest Airlines Inc.', 'UA - United Air Lines Inc.', 'US - US Airways Inc.', 'VX - Virgin America', 'WN - Southwest Airlines Co.']
df = pd.DataFrame({'AIRLINE':random.choices(airline_names, k=200),'DISTANCE':np.random.randint(500,10000,(200,))})

dfs = df.groupby('AIRLINE').agg(['count','sum'])
dfs.reset_index(inplace=True)
dfs.columns = ['AIRLINE','COUNT','DISTANCE']

fig = go.Figure()

for idx, row in dfs.iterrows():
    fig.add_trace(go.Scatter(x=[row['DISTANCE']], y=[row['COUNT']], name=row['AIRLINE']))

fig.update_traces(mode='markers')

fig.show()