这是一个非常基本的问题,但必须有一些我遗漏的东西。我的数据如下:
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)
其他地方定义了colours
和ax
。我不喜欢这个解决方案的原因是
ax
,熊猫应该照顾好一切。["a", "b", "c", "d"]
或set(df.z)
。答案 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()