在pandas散点图中注释标签

时间:2015-08-22 09:31:11

标签: pandas plot annotate

我从较旧的帖子中看到了这种方法,但无法得到我想要的情节。

开始

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

df = pd.DataFrame({'x':np.random.rand(10),'y':np.random.rand(10)}, 
                  index=list(string.ascii_lowercase[:10]))

散点图

ax = df.plot('x','y', kind='scatter', s=50)

然后定义一个函数来迭代行以注释

def annotate_df(row):  
    ax.annotate(row.name, row.values,
                xytext=(10,-5), 
                textcoords='offset points',
                size=18, 
                color='darkslategrey')

最后申请获取注释

ab= df.apply(annotate_df, axis=1)

不知怎的,我只是得到一个系列ab而不是我想要的散点图。哪里错了?谢谢!

2 个答案:

答案 0 :(得分:2)

您的代码有效,最后只需要plt.show()。

您的完整代码:

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

df = pd.DataFrame({'x':np.random.rand(10),'y':np.random.rand(10)}, 
                  index=list(string.ascii_lowercase[:10]))

ax = df.plot('x','y', kind='scatter', s=50)

def annotate_df(row):  
    ax.annotate(row.name, row.values,
                xytext=(10,-5), 
                textcoords='offset points',
                size=18, 
                color='darkslategrey')

ab= df.apply(annotate_df, axis=1)

plt.show()

答案 1 :(得分:0)

看起来这不再适用了,但解决方法很简单:将row.values从numpy.ndarray转换为list:
 list(row.values)