2016-03-03 6 views
1

У меня есть 2 dataframes, у меня есть данные тренировки, а у другого есть метки. В данных обучения имеется 6 функций/столбцов и 1 столбец в фрейме данных меток. Я хочу 6 сюжетов в моей сетке фасетов - все они будут участком разброса. Таким образом, функция 1 против метки, функция 2 против метки, функция 3 против метки, функция 4 против метки.Как построить график рассеяния FacetGrid с несколькими кадрами данных?

Может ли кто-нибудь показать мне, как это сделать?

, например, с помощью этих выборок данных кадров

In [15]: training 
Out[15]: 
    feature1 feature2 feature3 feature4 feature5 feature6 
0   2   3   4   5   2   5 
1   5   4   2   5   6   2 

In [16]: labels 
Out[16]: 
    label 
0  34 
1  2 

Это должен сделать 6 отдельных разброс участков, каждый с 2 ​​точками данных.

ответ

2

Seaborn имеет приятный FacetGrid function.You может объединить ваши два dataframes обернуть Сиборн facetgrid вокруг нормального matplotlib.pyplot.scatter()

import pandas as pd 
import random 
import matplotlib.pyplot as plt 
import seaborn as sns 

#make a test dataframe 
features = {} 
for i in range(7): 
    features['feature%s'%i] = [random.random() for j in range(10)] 
f = pd.DataFrame(features) 
labels = pd.DataFrame({'label':[random.random() for j in range(10)]}) 

#unstack it so feature labels are now in a single column 
unstacked = pd.DataFrame(f.unstack()).reset_index() 
unstacked.columns = ['feature', 'feature_index', 'feature_value'] 
#merge them together to get the label value for each feature value 
plot_data = pd.merge(unstacked, labels, left_on = 'feature_index', right_index = True) 
#wrap a seaborn facetgrid 
kws = dict(s=50, linewidth=.5, edgecolor="w") 
g = sns.FacetGrid(plot_data, col="feature") 
g = (g.map(plt.scatter, "feature_value", "label", **kws)) 

enter image description here

+0

Мне нравится ваш ответ, но, возможно, небольшая техническая ошибка в цикле for - для i в диапазоне (7) ... тогда i снова используется в «[random.random() для i в диапазоне (10)]» ... возможно, это должно быть изменено на «j» или что-то еще? –

+0

Я думаю, вы найдете, если вы проверите код, который он придумал, с желаемым результатом случайного генерирования тестового фреймворка; но я согласен, что двойное использование может быть немного запутанным. – Sam

+0

А .. Я предполагаю, что вы используете Python 3? Да, версия Python 2 утечки управляющей переменной. Ссылка: http://stackoverflow.com/a/4199355/904032 ... Я запускал его на версии 2. –

Смежные вопросы