我想标记来自两个不同数据框列(“ 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功能的哪里更改位置?我不明白。
答案 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()
答案 1 :(得分:0)
df['Z'] = df['C'] + ' ' + df['D'].map(str)
df[[x, y, 'Z']].apply(lambda x: ax.text(*x), axis=1)
将两列结合在一起也可以很好地完成工作。谢谢!