Pandas Scatterplot使用数据框字段来派生颜色和图例

时间:2016-12-13 23:01:21

标签: python pandas matplotlib visualization scatter-plot

我想创建一个散点图,它显示两个在pandas中相互映射的列,第三个用于大小,然后是基于标签的点的颜色(在下面的情况下,last_name)。

然后,我想要一个图例,显示颜色的点,然后是last_name值

每个姓氏应与不同的颜色相关联,图例中会显示绿点和米勒,红点和雅各布森等。

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
    'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
    'female': [0, 1, 1, 0, 1],
    'age': [42, 52, 36, 24, 73],
    'preTestScore': [4, 24, 31, 2, 3],
    'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'female', 'preTestScore', 'postTestScore'])

plt.scatter(df.preTestScore, df.postTestScore, s=df.age, label=df.last_name)
plt.legend(loc='upper left', prop={'size':6}, bbox_to_anchor=(1,1),ncol=1)

这给了我这样的东西:

enter image description here

我无法弄清楚如何获取颜色(理想情况下,我喜欢使用调色板)或如何让图例显示姓氏和点

非常感谢任何帮助..谢谢!

注意 - 我从这里开始Chris Albon

2 个答案:

答案 0 :(得分:3)

首先,为了生成颜色,您可以向数据框添加带颜色的列。然后可以将这些颜色传递给c scatter关键字参数。

创建包含不易访问条目的图例的常用解决方案是generate proxy artists。在这种情况下,可以创建一组不同颜色的标记,并将其提供给handles的{​​{1}}参数。然后,图例标签只是数据框中的last_names。

legend

enter image description here

答案 1 :(得分:1)

scatter的调用只会生成图例条目。如果您想要每个点的图例条目,最简单的方法是为每个点调用绘图方法。这不应该是性能问题,因为您不希望在图例中有数千个条目。我将使用plot,因为它适用于点,但如果您需要更高效的效果,也可以使用scatter

for _, row in df.iterrows():
    plt.plot(row.preTestScore, row.postTestScore, 'o', ms=np.sqrt(row.age),
             label=row.last_name)
plt.legend(loc='upper left', bbox_to_anchor=(1,1))

enter image description here

我还没弄明白如何使传奇中的圆点大小相同 - 而且我不确定你想要的是什么。我认为不同的尺寸看起来很好,可以帮助找到情节中的人。

或者,您只能使用scatter的一次调用,然后检查返回的PathCollection的属性并手动构建图例,但我认为我的方法更清晰。