使用数据框字段派生颜色和图例的熊猫散点图

我想创建一个散点图,以大熊猫显示两个相互映射的列,第三个列表示大小,然后基于标签绘制点的颜色(在下面的情况下为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为例.

解决方法:

首先,为了产生颜色,您可以在数据框中添加带有颜色的列.然后可以将这些颜色传递给分散的c关键字参数.

用不易访问的条目创建图例的常用方法generate proxy artists.在这种情况下,可以创建一组不同颜色的标记并将其提供给Legend的handles参数.图例标签只是数据帧中的last_names.

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.lines

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],
    'colors' : ["r", "g", "b", "k", "cyan"]} # add a column for colors
df = pd.DataFrame(raw_data, 
     columns = ['first_name', 'last_name', 'age', 'female', 'preTestscore', 'postTestscore', "colors"])

#supply colors as argument for c
plt.scatter(df.preTestscore, df.postTestscore, s=df.age, c=df.colors) 
# generate proxy artists for legend
handles = [matplotlib.lines.Line2D([],[], marker="o", color=c, linestyle="none") for c in df.colors.values]
# supply proxy artists to handles and last names to labels
plt.legend(handles=handles, labels=list(df.last_name.values), 
           loc='upper left', prop={'size':6}, bBox_to_anchor=(1,1),ncol=1, numpoints=1)
plt.subplots_adjust(right=0.8)
plt.show()

enter image description here

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...