Сетка участков с линиями, наложенными в матплотлиб - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть фрейм данных, который состоит из набора данных x, y, которые я хотел бы видеть в виде разброса вместе со строкой. Фрейм данных состоит из данных, форма которых повторяется в нескольких категориях. Конечным результатом, который я хотел бы видеть, является какая-то сетка графиков, но я не совсем уверен, как matplotlib обрабатывает несколько субплотов перегруженных данных.

Вот пример типа данных, которые я ' m работает с:

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 в этом случае. Однако, вызов графиков в l oop просто накладывает их все на одно изображение.

Есть ли хороший способ взять следующий кодовый блок и создать сетку из подмножеств категории? Я слишком усложняю это, выполняя подмножество в вызове сюжета?

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.

1 Ответ

2 голосов
/ 30 апреля 2020

Вы можете использовать либо 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

Или ручное 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')

дает:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...