在seaborn中的多个单一地块与pandas groupby数据

时间:2017-03-19 15:18:04

标签: python pandas seaborn

我的问题是非常具体的,我猜,但我似乎无法找到一个合适的解决方案,而且我对我得到的错误输出毫无头绪。 无论如何,我有一个从sqlite数据库加载的pandas数据帧。

data_frame = pd.read_sql_query(
"SELECT (total_comb + total_comb_rc) as total_comb, p_val, w_length from {tn}".format(
    tn=table_name), conn)

加载后,我会按照' w_length'对数据进行分组。值。

for i, group in data_frame.groupby('w_length'):

现在,我想为使用seaborn lmplot创建的每个组绘制一个散点图。

for i, group in data_frame.groupby('w_length'):
    sns.lmplot(x=group['total_comb'], y=group['p_val'],
               data=group,
               fit_reg=False)
    sns.despine()
    plt.savefig('test_scatter'+i+'.png', dpi=400)

但由于某种原因我得到了这个输出。

'[  6.95485628e-02   3.53641178e-01   3.46862200e+06   4.11684800e+06] not in index'

没有情节文件。 我知道我做错了什么,但我似乎无法弄明白。

pd:我知道我可以做这样的事情。

sns.lmplot(x='total_comb', y='p_val',
       data=data_frame,
       fit_reg=False,
       hue="w_length", x_jitter=.1, col="w_length", col_wrap=3, size=4)

但我也需要每个' w_length的分割图。

谢谢!

1 个答案:

答案 0 :(得分:1)

假设问题不是来自sql数据库的数据收集,可能是因为你打电话给了  sns.lmplot(x=group['total_comb'], y=group['p_val'], data=group) 而不是  sns.lmplot(x='total_comb', y='p_val', data=group)

这是一个工作示例,它生成两个单独的图:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np; np.random.seed(42)

x = np.arange(24)
y = np.random.randint(1,10, len(x))
cat = np.random.choice(["A", "B"], size=len(x))
df = pd.DataFrame({"x": x, "y": y, "cat": cat})

for i, group in df.groupby('cat'):
    sns.lmplot(x="x", y="y", data=group, fit_reg=False)
    plt.savefig(__file__+str(i)+".png")
plt.show()