Как получить все данные с участка распределения морского происхождения с распределениями по нескольким направлениям? - PullRequest
0 голосов
/ 26 сентября 2018

Пост Получение точек данных из дистрибьютора Seaborn описывает, как вы можете получать элементы данных, используя sns.distplot(x).get_lines()[0].get_data(), sns.distplot(x).patches и [h.get_height() for h in sns.distplot(x).patches]

Но как вы можете это сделать, если выИспользовали несколько слоев, нанося данные в цикле, например:

Фрагмент 1

for var in list(df):
    print(var)
    distplot = sns.distplot(df[var])

Plot

enter image description here

Существует ли простой и надежный способ получения значений X и Y как для двух линейных диаграмм, так и для столбцов?


Вотвся установка для простого копирования и вставки:

#%%
# imports
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
import pylab
pylab.rcParams['figure.figsize'] = (8, 4)
import seaborn as sns
from collections import OrderedDict

# Function to build synthetic data
def sample(rSeed, periodLength, colNames):

    np.random.seed(rSeed)
    date = pd.to_datetime("1st of Dec, 1999")   
    cols = OrderedDict()

    for col in colNames:
        cols[col] = np.random.normal(loc=0.0, scale=1.0, size=periodLength)
    dates = date+pd.to_timedelta(np.arange(periodLength), 'D')

    df = pd.DataFrame(cols, index = dates)
    return(df)

# Dataframe with synthetic data
df = sample(rSeed = 123, colNames = ['X1', 'X2'], periodLength = 50)

# sns.distplot with multiple layers
for var in list(df):
    myPlot = sns.distplot(df[var])

Вот что я пробовал:

Y-значения для гистограммы:

Если я запускаю:

barX = [h.get_height() for h in myPlot.patches]

Тогда я получаю следующий список длины 11:

[0.046234272703757885,
 0.1387028181112736,
 0.346757045278184,
 0.25428849987066837,
 0.2542884998706682,
 0.11558568175939472,
 0.11875881712519201,
 0.3087729245254993,
 0.3087729245254993,
 0.28502116110046083,
 0.1662623439752689]

И это кажется разумным, поскольку кажется, что для синих столбцов есть 6 значений и 5значения для красных полос.Но как мне узнать, какие значения принадлежат какой переменной?

Y-значения для строки:

Это кажется немного проще, чем часть гистограммы, так как вы можете использовать myPlot.get_lines()[0].get_data() И myPlot.get_lines()[1].get_data() чтобы получить:

Out[678]: 
(array([-4.54448949, -4.47612134, -4.40775319, -4.33938504, -4.27101689,
         ...
         3.65968859,  3.72805675,  3.7964249 ,  3.86479305,  3.9331612 ,
         4.00152935,  4.0698975 ,  4.13826565]),
 array([0.00042479, 0.00042363, 0.000473  , 0.00057404, 0.00073097,
        0.00095075, 0.00124272, 0.00161819, 0.00208994, 0.00267162,
        ...
        0.0033384 , 0.00252219, 0.00188591, 0.00139919, 0.00103544,
        0.00077219, 0.00059125, 0.00047871]))

myPlot.get_lines()[1].get_data()

Out[679]: 
(array([-3.68337423, -3.6256517 , -3.56792917, -3.51020664, -3.4524841 ,
        -3.39476157, -3.33703904, -3.27931651, -3.22159398, -3.16387145,
         ...
         3.24332952,  3.30105205,  3.35877458,  3.41649711,  3.47421965,
         3.53194218,  3.58966471,  3.64738724]),
 array([0.00035842, 0.00038018, 0.00044152, 0.00054508, 0.00069579,
        0.00090076, 0.00116922, 0.00151242, 0.0019436 , 0.00247792,
        ...
        0.00215912, 0.00163627, 0.00123281, 0.00092711, 0.00070127,
        0.00054097, 0.00043517, 0.00037599]))

Но все это все еще кажется немного громоздким.Так кто-нибудь знает о более прямом подходе к извлечению всех данных в словарь или фрейм данных?

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