Matplotlib Pandas在绘图的分组数据中循环

Matplotlib Pandas在绘图的分组数据中循环,matplotlib,pandas,Matplotlib,Pandas,我做了以下工作: for grp, val in df_grp: ax1.plot(val.concentration,val.capacity,'o', label = grp) ax1.set_xlim(0,2.5) plt.legend(loc=1, bbox_to_anchor=[0,0,1.5,1]) 如何去掉括号、u和引号 因为您使用组作为标签,所以标签实际上是表示每个组的tuple的str属性,这是一个快速解决方法: In [42]: print df

我做了以下工作:

for grp, val in df_grp:
    ax1.plot(val.concentration,val.capacity,'o', label = grp)      
ax1.set_xlim(0,2.5)
plt.legend(loc=1, bbox_to_anchor=[0,0,1.5,1])
如何去掉括号、u和引号


因为您使用组作为标签,所以标签实际上是表示每个组的
tuple
str
属性,这是一个快速解决方法:

In [42]:

print df
  v1  v2  v3
0  A  11   1
1  A  11   2
2  A  30   3
3  A  30   4
4  B  45   5
5  B  45   6
6  B  12   7
7  B  12   8
In [43]:

ax = plt.subplot(111)
for grp, val in df.groupby(['v1', 'v2']):
    ax.plot(val.v3,val.v3-1,'o', label = grp)
L = ax.legend(loc=4)
_ = [item.set_text(' '.join(map(str, eval(item.get_text())))) for item in L.get_texts()]

逐步展示:

In [38]:

[item.get_text() for item in L.get_texts()]
Out[38]:
["('A', 11)", "('A', 30)", "('B', 12)", "('B', 45)"]
In [39]:

[eval(item.get_text()) for item in L.get_texts()] #convert them back to tuple
Out[39]:
[('A', 11), ('A', 30), ('B', 12), ('B', 45)]
In [41]:

[' '.join(map(str, eval(item.get_text()))) for item in L.get_texts()] #into strings
Out[41]:
['A 11', 'A 30', 'B 12', 'B 45']

+为了让我更好地理解python和这个漂亮的答案,下面划线是什么?
。set_text()
方法返回
None
。因此,如果您使用的是交互式环境,那么最后一步将返回
[None,None,None…]
\u=
抑制该输出。