使用matplotlib自动为散点图指定颜色?

时间:2017-01-04 12:50:05

标签: python-3.x matplotlib scatter-plot

我有一个包含大约9800个条目的数据集。一列包含用户名(大约60个单独的用户名)。我想在matplotlib中生成一个散点图,并为不同的用户分配不同的颜色。

这基本上就是我做的事情:

import matplotlib.pyplot as plt
import pandas as pd

x = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
y = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
users =['mark', 'mark', 'mark', 'rachel', 'rachel', 'rachel', 'jeff', 'jeff', 'jeff', 'lauren', 'lauren', 'lauren']

#this is how the dataframe basicaly looks like    
df = pd.DataFrame(dict(x=x, y=y, users=users)

#I go on an append the df with colors manually
#I'll just do it the easy albeit slow way here

colors =['red', 'red', 'red', 'green', 'green', 'green', 'blue', 'blue', 'blue', 'yellow', 'yellow', 'yellow']

#this is the dataframe I use for plotting
df1 = pd.DataFrame(dict(x=x, y=y, users=users, colors=colors)

plt.scatter(df1.x, df1.y, c=df1.colors, alpha=0.5)
plt.show()

但是,我不想手动为用户指定颜色。我必须在未来几周内多次这样做,每次用户都会有所不同。

我有两个问题:

(1)有没有办法自动为各个用户分配颜色? (2)如果是这样,有没有办法分配颜色方案或调色板?

1 个答案:

答案 0 :(得分:3)

user_colors = {}
unique_users = list(set(users)) 
step_size = (256**3) // len(unique_users)
for i, user in enumerate(unique_users):
    user_colors[user] = '#{}'.format(hex(step_size * i)[2:])

然后你有一个字典(user_colors),每个用户都有一个独特的颜色。

colors = [user_colors[user] for user in users]

现在,您的阵列为每个用户提供了鲜明的颜色