大熊猫

时间:2015-07-09 21:26:20

标签: python pandas matplotlib scatter-plot

过去30分钟,这让我很烦恼。我想做的是按类别分散情节。我看了一下文档,但是我还没有找到答案。我看了here,但是当我在iPython Notebook中运行时,我什么都没得到。

这是我的数据框:

time    cpu   wait    category 
8       1     0.5     a 
9       2     0.2     a
2       3     0.1     b
10      4     0.7     c
3       5     0.2     c
5       6     0.8     b

理想情况下,我想要一个散点图,在x轴上显示CPU,在y轴上等待,图中的每个点都按类别区分。因此,例如,如果a =红色,b =蓝色,c =绿色,则点(1,0.5)和(2,0.2)应为红色,(3,0.1)和(6,0.8)应为蓝色等。

我如何用熊猫做到这一点?还是matplotlib?无论哪个工作。

3 个答案:

答案 0 :(得分:2)

你可以做到

color_map = {'a': 'r', 'b': 'b', 'c': 'y'}
ax = plt.subplot()
x, y = df.cpu, df.wait
colors = df.category.map(color_map)
ax.scatter(x, y, color=colors)

这会给你红色的a类,蓝色的b,黄色的c。 因此,您可以通过与数组长度相同的颜色别名列表。 您可以在此处查看无数可用颜色:http://matplotlib.org/api/colors_api.html。 我不认为绘图方法对于散点图非常有用。

答案 1 :(得分:2)

这与@JoeCondron的答案基本相同,但是两个班轮:

cmap = {'a': 'red', 'b': 'blue', 'c': 'yellow'}
df.plot(x='cpu', y='wait', kind='scatter', 
        colors=[cmap.get(c, 'black') for c in df.category])

如果没有为该类别映射颜色,则默认为黑色。

编辑:

以上适用于Pandas 0.14.1。对于0.16.2,'colors'需要更改为'c':

df.plot(x='cpu', y='wait', kind='scatter', 
    c=[cmap.get(c, 'black') for c in df.category])

答案 2 :(得分:1)

我会根据类别创建一个包含颜色的列,然后执行以下操作,其中ax是matplotlib ax,df是您的数据帧:

ax.scatter(df['cpu'], df['wait'], marker = '.', c = df['colors'], s = 100)