具有不同颜色和标签的散点图

时间:2020-01-02 17:13:29

标签: python pandas matplotlib scatter

我有一个熊猫数据框。看起来像这样:enter image description here

我正在尝试为每个点创建具有不同颜色的散点图。我尝试过:

df.plot.scatter(x='x',y='y',c=df.colors.tolist(), legend=True)

我得到了散点图。但是我无法显示标签“ Financials”与颜色“#4ce068”相关联。

我该怎么办?谢谢

我尝试过:

df.plot.scatter(x='x',y='y',c=df.colors.tolist(),label=df.key.unique.tolist())

这几乎可以用,但是标签太多,与标签相关的颜色很难看清。

我希望按键显示具有相关的颜色,最好在图表的顶部,即标题旁边。有可能吗?

My dataframe in dictionary format: 

{'key': {0: 'Financials',
1: 'Consumer Discretionary',
2: 'Industrials',
3: 'Communication Services',
4: 'Communication Services',
5: 'Consumer Discretionary',
6: 'Health Care',
7: 'Information Technology',
8: 'Consumer Discretionary',
9: 'Information Technology'},
'x': {0: 1630000.0,
 1: 495800000.0,
 2: 562790000.0,
 3: 690910000.0,
 4: 690910000.0,
 5: 753090000.0,
 6: 947680000.0,
 7: 1010000000.0,
 8: 1090830000.0,
 9: 1193600000.0},
 'y': {0: 0.02549175,
 1: 0.0383163,
 2: -0.09842154,
 3: 0.03876266,
 4: 0.03596279,
 5: 0.01897367,
 6: 0.06159238,
 7: 0.0291209,
 8: 0.003931255,
 9: -0.007134976},
'colors': {0: '#4ce068',
 1: '#ecef4a',
 2: '#ff3c83',
 3: '#ff4d52',
 4: '#ff4d52',
 5: '#ecef4a',
 6: '#00f1d1',
 7: '#d9d9d9',
 8: '#ecef4a',
 9: '#d9d9d9'}}

2 个答案:

答案 0 :(得分:3)

如果您不介意使用plotly,可以尝试

import pandas as pd
import plotly.express as px

px.scatter(df, 'x', 'y', color="key", color_discrete_sequence=df["colors"].tolist())

enter image description here

但是考虑到您选择的颜色,px.scatter(df, 'x', 'y', color="key")看起来会更好

enter image description here

答案 1 :(得分:1)

这里是一种方法:

fig, ax = plt.subplots()
for i in df.colors.unique():
    df_color = df[df.colors==i]
    df_color.plot.scatter(x='x',y='y', ax=ax, c=i, label=df_color.key.iloc[0])

ax.legend(loc='best')

您会得到 enter image description here