Пост Получение точек данных из дистрибьютора 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

Существует ли простой и надежный способ получения значений 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]))
Но все это все еще кажется немного громоздким.Так кто-нибудь знает о более прямом подходе к извлечению всех данных в словарь или фрейм данных?