2017-09-25 101 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