2017-09-25 100 views
0

我有一个数据帧作为以下中的数据帧的列, df.head()遍历通过跳过第一列和绘制多条曲线

 ID AS_FP AC_FP RP11_FP RP11_be AC_be AS_be Info 
AE02 0.060233 0 0.682884 0.817115 0.591182 0.129252 SAP 
AE03 0 0 0 0.889181 0.670113 0.766243 SAP 
AE04 0 0 0.033256 0.726193 0.171861 0.103839 others 
AE05 0 0 0.034988 0.451329 0.431836 0.219843 others 

什么我的目标是绘制每一列从AS_FP开始直到RP11_beta作为lmplot,每个x axis是以FP结尾的列,并且y axis是其对应列以be结尾。 ,我想将其保存为独立的文件,所以我strated迭代通过列通过跳过第一列ID,这样,

for ind, column in enumerate(df.columns): 
    if column.split('_')[0] == column.split('_')[0]: 

但我迷路了怎么继续下去,我需要绘制

sns.lmplot(x, y, data=df, hue='Info',palette=colors, fit_reg=False, 
      size=10,scatter_kws={"s": 700},markers=["o", "v"]) 

和保存每个图像作为单独的文件

回答

1

直接的解决方案:

1)玩具数据:

import pandas as pd 
from collections import OrderedDict 
import matplotlib.pyplot as plt 
import seaborn as sns 

dct = OrderedDict() 
dct["ID"] = ["AE02", "AE03", "AE04", "AE05"] 
dct["AS_FP"] = [0.060233, 0, 0, 0] 
dct["AC_FP"] = [0, 0,0, 0] 
dct["RP11_FP"] = [0.682884, 0, 0.033256, 0.034988] 
dct["AS_be"] = [0.129252, 0.766243, 0.103839, 0.219843] 
dct["AC_be"] = [0.591182, 0.670113, 0.171861, 0.431836] 
dct["RP11_be"] = [0.817115, 0.889181, 0.726193, 0.451329] 
dct["Info"] = ["SAP", "SAP", "others", "others"] 

df = pd.DataFrame(dct) 

2)通过迭代对,节约用唯一的文件名每张图:

graph_cols = [col for col in df.columns if ("_FP" in col) or ("_be" in col)] 

fps = sorted([col for col in graph_cols if "_FP" in col]) 
bes = sorted([col for col in graph_cols if "_be" in col]) 

for x, y in zip(fps, bes): 
    snsplot = sns.lmplot(x, y, data=df, fit_reg=False, hue='Info', 
      size=10, scatter_kws={"s": 700}) 
    snsplot.savefig(x.split("_")[0] + ".png") 

可以在lmlplot添加所需的PARAMS根据您的需要。

+0

谢谢你的解决方案,实际上我的数据框的尺寸是(82,28),所以当我尝试解决方案时,我得到以下错误消息,(操作数不能与形状(2,)一起广播) (82,)) – user1017373

+0

因此,如果您的玩具示例不代表它,请告诉我们更多关于您的数据的信息。我想你有其他的列,除了对和ID。我在答案中添加了列检查,但是您提到的错误是numpy异常,因此需要使用adittional信息。 –

+0

是的,这是真的。我有一个额外的栏信息,我需要用于lmplot中的色调。此外,这些列不是按照您展示的玩具数据框的字典顺序排列的。我编辑了我的主要问题。请看看 – user1017373