Python 在matplotlib中过度绘制线的绘图网格

Python 在matplotlib中过度绘制线的绘图网格,python,pandas,numpy,matplotlib,Python,Pandas,Numpy,Matplotlib,我有一个数据帧,它由一堆x,y数据组成,我希望看到这些数据以分散的形式和一条线。dataframe由数据组成,其形式在多个类别上重复。我想看到的最终结果是一些网格的绘图,但我不完全确定matplotlib如何处理多个子绘图过多的数据 下面是我正在处理的数据类型的一个示例: import pandas as pd import numpy as np import matplotlib.pyplot as plt category = np.arange(1,10) total_data =

我有一个数据帧,它由一堆x,y数据组成,我希望看到这些数据以分散的形式和一条线。dataframe由数据组成,其形式在多个类别上重复。我想看到的最终结果是一些网格的绘图,但我不完全确定matplotlib如何处理多个子绘图过多的数据

下面是我正在处理的数据类型的一个示例:

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

category = np.arange(1,10)

total_data = pd.DataFrame()

for i in category:
    x = np.arange(0,100)
    y = 2*x + 10
    data = np.random.normal(0,1,100) * y
    dataframe = pd.DataFrame({'x':x, 'y':y, 'data':data, 'category':i})

    total_data = total_data.append(dataframe)
我们有x个数据,有y个数据,它是某种生成的数据集(数据变量)的线性模型

我已经能够根据主数据集的子集生成单独的绘图,但在本例中,我希望看到它们在3x3网格中并排显示。然而,调用循环中的绘图只是将它们全部过度打印到一张图像上

有没有一个好的方法来获取下面的代码块并从类别子集中生成一个网格?我是否通过在plot调用中执行子集来过度复杂化它

plt.scatter(total_data['x'][total_data['category']==1], total_data['data'][total_data['category']==1])
plt.plot(total_data['x'][total_data['category']==1], total_data['y'][total_data['category']==1], linewidth=4, color='black')

如果有一种更简单的方法来生成按类别的散点加线,我完全赞成。我不知道seaborn是否有一种与pyplot类似或更直观的方法可供使用。

您可以使用
sns.FacetGrid
或手动
plt.plot
。例如:

g = sns.FacetGrid(data=total_data, col='category', col_wrap=3)
g = g.map(plt.scatter, 'x','data')
g = g.map(plt.plot,'x','y', color='k');
给出:

或手动
plt
groupby

fig, axes = plt.subplots(3,3)

for (cat, data), ax in zip(total_data.groupby('category'), axes.ravel()):
    ax.scatter(data['x'], data['data'])
    ax.plot(data['x'], data['y'], color='k')
给出:


您可以使用
sns.FacetGrid
或手动
plt.plot
。例如:

g = sns.FacetGrid(data=total_data, col='category', col_wrap=3)
g = g.map(plt.scatter, 'x','data')
g = g.map(plt.plot,'x','y', color='k');
给出:

或手动
plt
groupby

fig, axes = plt.subplots(3,3)

for (cat, data), ax in zip(total_data.groupby('category'), axes.ravel()):
    ax.scatter(data['x'], data['data'])
    ax.plot(data['x'], data['y'], color='k')
给出:


这是否回答了您的问题?这回答了你的问题吗?