pandas scatterplot,带有定性列中的标签/颜色

时间:2014-11-27 17:24:22

标签: python matplotlib pandas

这是一个非常基本的问题,但必须有一些我遗漏的东西。我的数据如下:

    x   y   z
0   2.7 0.3 a
1   3.4 0.4 b
2   15  1.9 b
3   3   0.4 c
4   7.4 0.8 a

z具有n定性值的位置。我想使用(x,y)作为标签(即z不同颜色等)来绘制n。我现在这样做的方式基本上是限制z的各个值,循环它们并一次做一个散点图。有更快的选择吗?

编辑:这是我目前的解决方案

for i, z in zip(range(4), ["a", "b", "c", "d"]):
    df.xs(z).plot(kind="scatter", label=z, x="x", y="y", color=colours[i], ax=ax)

其他地方定义了coloursax。我不喜欢这个解决方案的原因是

  1. 为什么我必须手动放置颜色,我已经有一个调色板,正常的图已经循环通过它。
  2. 我为什么要关心ax,熊猫应该照顾好一切。
  3. 最重要!)我不想遍历["a", "b", "c", "d"]set(df.z)

1 个答案:

答案 0 :(得分:0)

import pandas as pd

df = pd.DataFrame(data=[2.7, 3.4, 15, 3, 7.4], columns=['x'])
df['y'] = [ 0.3, 0.4, 1.9, 0.4, 0.8]
df['z'] = ['a', 'b', 'b', 'c', 'a']


ax = df.set_index('x')['y'].plot(style='o')

def label_point(x, y, val, ax):
    a = pd.concat({'x': x, 'y': y, 'val': val}, axis=1)
    for i, point in a.iterrows():
        ax.text(point['x'], point['y'], str(point['val']))

label_point(df.x, df.y, df.z, ax)

draw()