在matplotlib中,带有线条的网格图。

问题描述 投票:0回答:1

我有一个数据框,它由一堆x,y数据组成,我想用散点形式和一条线一起看。数据框由多个类别的数据组成,其形式重复。我想看到的最终结果是某种网格的图,但我并不完全清楚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网格中。然而,在循环中调用这些图只是将它们全部重绘到一张图像上。

有什么好的方法可以把下面的代码块用类别子集做一个网格吗?我在绘图内调用子集是否过于复杂?

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更直观的方法可以使用。

python pandas numpy matplotlib
1个回答
2
投票

你可以使用以下两种方法 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');

给予:

enter image description here

或手动 pltgroupby:

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')

给予:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.