标记来自两个不同数据框列的数据点

时间:2019-01-11 12:40:45

标签: python-3.x pandas matplotlib

我想标记来自两个不同数据框列(“ C”和“ D”)的数据点。但是注释是重叠的,因此无法正确阅读。

x = 'A'
y = 'B'

ax.plot(df[x], df[y], "ro")

df[[x, y, 'C']].apply(lambda x: ax.text(*x), axis=1)
df[[x, y, 'D']].apply(lambda x: ax.text(*x), axis=1)

我必须在此Apply功能的哪里更改位置?我不明白。

2 个答案:

答案 0 :(得分:0)

您可以使用plt.annotate相对于要注释的点移动文本。这可以通过使用textcoords关键字来完成。在这里,我们可以将一个文本移动+3,将另一个文本移动-3点。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randint(1,50, size=(8,4)), columns=list("ABCD"))

fig, ax = plt.subplots()
ax.plot(df.A, df.B, "ro")

f = lambda x, kw: ax.annotate(x[2], xy=(x[0],x[1]), textcoords="offset points", **kw)
g = lambda x: ax.annotate(x[2], xy=(x[0],x[1]), xytext=(2,-5), textcoords="offset points", va="top")
df[["A", "B", 'C']].apply(lambda x: f(x,dict(xytext=(2,3))), axis=1)
df[["A", "B", 'D']].apply(lambda x: f(x,dict(xytext=(2,-3), va="top")), axis=1)

ax.margins(0.1)
plt.show()

enter image description here

答案 1 :(得分:0)

df['Z'] = df['C'] + ' ' + df['D'].map(str)
df[[x, y, 'Z']].apply(lambda x: ax.text(*x), axis=1)

将两列结合在一起也可以很好地完成工作。谢谢!